Jika saya menghapus file di Subversion, bagaimana saya bisa melihat riwayat dan isinya? Jika saya mencoba melakukan svn cat
atau svn log
pada file yang tidak ada, itu mengeluh bahwa file tersebut tidak ada.
Juga, jika saya ingin menghidupkan kembali file, haruskah saya svn add
mengembalikannya?
(Saya bertanya secara khusus tentang Subversi, tetapi saya juga ingin mendengar tentang bagaimana Bazaar, Mercurial, dan Git menangani kasus ini juga.)
sumber
Ketika Anda ingin melihat file-file lama Anda harus benar-benar mengetahui perbedaan antara:
dan
Versi pertama melihat path yang sekarang tersedia sebagai http: // server / svn / project / file dan mengambil file itu seperti dalam revisi 1234. (Jadi sintaks ini tidak berfungsi setelah file dihapus).
Sintaks kedua mendapatkan file yang tersedia sebagai http: // server / svn / project / file dalam revisi 1234. Jadi sintaks ini TIDAK bekerja pada file yang dihapus.
Anda bahkan dapat menggabungkan metode ini untuk mengambil file yang tersedia di revisi 2345 sebagai http: // server / svn / project / file tetapi dengan konten seperti di 1234 dengan:
sumber
./local/file
ketika./local
direktori tidak ada. Ini mungkin bukan masalah untuk versi SVN yang lebih baru.^
notasi menjadi berguna: mengacu pada akar repositori, sehingga Anda dapat mengatakansvn cat ^/local/file@REV
(tergantung pada jarak antara akar repositori dan URL).svn: E200009: Could not cat all targets because some targets are directories
Pertama, cari nomor revisi tempat file terhapus:
Kemudian lihat log.txt (bukan guru SVN, jadi saya tidak tahu cara yang lebih baik) untuk baris dengan
dan lihat revisi mana itu. Kemudian, seperti pada jawaban lain, hidupkan kembali file menggunakan revisi sebelumnya.
sumber
Tidak ada yang istimewa di git. Jika Anda tahu nama file, Anda bisa mengetahui perubahan yang menghapusnya dengan log:
Kemudian Anda bisa menggunakan komit itu untuk mendapatkan file seperti yang ada sebelum penghapusan.
Contoh:
Perhatikan bahwa ini sebenarnya tidak mengembalikan file ke kontrol revisi. Itu hanya menjatuhkan file seperti yang ada di keadaan terakhirnya ke lokasi saat ini. Anda kemudian dapat menambahkannya atau hanya memeriksanya atau apa pun dari titik itu.
sumber
Solusi hanya menggunakan GUI:
Jika Anda tahu nama file, tetapi tidak tahu nomor revisi terakhirnya atau bahkan jalurnya:
Ini kemudian akan menunjukkan hanya revisi-revisi di mana file ditambahkan / dimodifikasi / dihapus. Ini adalah riwayat file Anda.
Perhatikan bahwa jika file itu dihapus dengan menghapus salah satu folder induknya, itu tidak akan memiliki entri 'dihapus' di log (dan solusi mjy tidak akan berfungsi). Dalam hal ini, entri terbaru dalam log yang difilter akan sesuai dengan kontennya saat dihapus.
sumber
Akan memberi Anda jalan dan revisi. In git (juga memeriksa untuk penggantian nama):
sumber
Selain jawaban Dustin, jika Anda hanya ingin memeriksa isinya, dan tidak memeriksanya, dalam contohnya Anda dapat melakukannya:
the: memisahkan revisi dan jalur dalam revisi itu, secara efektif meminta jalur tertentu pada revisi tertentu.
sumber
Gunakan perintah ini:
Ini akan mendaftar semua revisi yang pernah menghapus file yang cocok dengan pola. Artinya, jika Anda sedang mencari file README, maka semua
/src/README
,/src/README.first
dan/some/deeply/hidden/directory/READMENOT
akan ditemukan dan terdaftar.Jika nama file Anda mengandung garis miring (jalur), titik, atau karakter regex khusus lainnya, jangan lupa untuk menghindarinya untuk menghindari ketidaksesuaian atau kesalahan.
sumber
Jika Anda tidak tahu jalur ke file yang dihapus, ternyata Anda dapat mencarinya di
svn log
perintah yang terlalu berat :Perintah ini mungkin memalu server seperti halnya tanpa opsi pencarian, tetapi setidaknya sisa sumber daya yang terlibat (termasuk bola mata Anda) akan agak lega, karena itu akan memberi tahu Anda di mana revisi file itu dihapus. Kemudian, Anda dapat mengikuti tips lainnya (terutama menggunakan
svn log
perintah yang sama , tetapi sudah di jalur yang ditentukan).sumber
svn log --search _test2.php -v
... svn: opsi tidak valid: --search ... :(Poster sebenarnya telah mengajukan 3 pertanyaan di sini:
Semua jawaban yang saya lihat di sini adalah untuk pertanyaan 2 dan 3.
Jawaban untuk pertanyaan 1 adalah:
Anda masih perlu mendapatkan nomor revisi ketika file terakhir ada, yang dijawab dengan jelas oleh orang lain di sini.
sumber
Ah, karena saya belajar menggunakan Bazaar, itu adalah sesuatu yang saya coba. Tanpa hasil, tampaknya Anda tidak dapat login dan membubuhi keterangan file yang dihapus saat ini ... :-(
Mencoba:
tapi anehnya (dan untungnya) saya bisa melakukan:
dan:
dan seperti yang disarankan dalam bug di atas:
(sesuaikan
-B
(--before-context
) parameter sesuai kebutuhan).sumber
Anda perlu menentukan revisi.
sumber
Jika Anda ingin melihat riwayat file sebelum diubah namanya, maka seperti yang disebutkan dalam komentar di sini dapat Anda gunakan
sumber
Saya ingin jawaban, sendiri. Coba yang berikut untuk hanya mengeluarkan output dari
svn log
.Ini menyaring keluaran log melalui awk . awk menyangga setiap baris revisi yang ditemukannya, mengeluarkannya hanya saat catatan penghapusan ditemukan. Setiap revisi hanya keluaran sekali, jadi banyak penghapusan dalam revisi dikelompokkan bersama (seperti dalam
svn log
output standar ).Anda dapat menentukan a
--limit
untuk mengurangi jumlah catatan yang dikembalikan. Anda juga dapat menghapus--stop-on-copy
, sesuai kebutuhan.Saya tahu ada keluhan tentang efisiensi parsing seluruh log. Saya pikir ini adalah solusi yang lebih baik daripada grep dan
-B
opsi "cast a wide net" . Saya tidak tahu apakah ini lebih efisien, tetapi saya tidak bisa memikirkan alternatifnyasvn log
. Ini mirip dengan jawaban @Alexander Amelkin, tetapi tidak perlu nama tertentu. Ini juga skrip awk pertama saya , jadi mungkin tidak konvensional.sumber
Asumsikan file Anda bernama ~ / src / a / b / c / delete.file
keluaran sampel, menemukannya di r90440
salin kembali ke versi sebelumnya (90439 = 90440-1)
sumber
Anda dapat menemukan revisi terakhir yang menyediakan file menggunakan pencarian biner. Saya telah membuat
/bin/bash
skrip sederhana untuk ini:sumber
Saya menulis naskah php yang menyalin log svn dari semua repositori saya ke dalam database mysql. Sekarang saya dapat melakukan pencarian teks lengkap pada komentar atau nama file saya.
sumber