Saya tahu saya bisa svn diff -r a:b repo
melihat perubahan antara dua revisi yang ditentukan. Yang saya suka adalah perbedaan untuk setiap revisi yang mengubah file. Apakah perintah seperti itu tersedia?
Saya tahu saya bisa svn diff -r a:b repo
melihat perubahan antara dua revisi yang ditentukan. Yang saya suka adalah perbedaan untuk setiap revisi yang mengubah file. Apakah perintah seperti itu tersedia?
Jawaban:
Tidak ada perintah bawaan untuk itu, jadi saya biasanya hanya melakukan sesuatu seperti ini:
#!/bin/bash
# history_of_file
#
# Outputs the full history of a given file as a sequence of
# logentry/diff pairs. The first revision of the file is emitted as
# full text since there's not previous version to compare it to.
function history_of_file() {
url=$1 # current url of file
svn log -q $url | grep -E -e "^r[[:digit:]]+" -o | cut -c2- | sort -n | {
# first revision as full text
echo
read r
svn log -r$r $url@HEAD
svn cat -r$r $url@HEAD
echo
# remaining revisions as differences to previous revision
while read r
do
echo
svn log -r$r $url@HEAD
svn diff -c$r $url@HEAD
echo
done
}
}
Kemudian, Anda dapat menyebutnya dengan:
history_of_file $1
svn: '.' is not a working copy svn: Syntax error in revision argument '@HEAD' svn: Syntax error in revision argument '@HEAD'
svn log --diff [path_to_file]
bekerja persis seperti ini! stackoverflow.com/a/24938573/3185510
Sedikit berbeda dari yang Anda gambarkan, tetapi saya pikir ini mungkin yang sebenarnya Anda butuhkan:
svn blame filename
Ini akan mencetak file dengan setiap baris diawali oleh waktu dan penulis dari komit yang terakhir mengubahnya.
Jika Anda ingin melihat seluruh riwayat file dengan perubahan kode:
svn log --diff [path_to_file] > log.txt
--diff
karena ia memiliki tes untuk opsi sedangkan 1.7.3 tidak memilikinya - subversion/tests/cmdline/log_tests.py
.
--limit <number>
opsi. Seperti itu:svn log --diff --limit 5 [path_to_file]
Anda bisa menggunakan git-svn
untuk mengimpor repositori ke repositori Git, lalu gunakan git log -p filename
. Ini menunjukkan setiap entri log untuk file diikuti oleh diff yang sesuai.
git log X..Y -o filename
Dimulai dari
svn log -q file | grep '^r' | cut -f1 -d' '
Itu akan membuat Anda daftar revisi di mana file berubah, yang kemudian dapat Anda gunakan untuk skrip panggilan berulang svn diff
.
svn log -q some_file.xxx | grep ^r | awk '{print $1}' | sed -e 's/^r//' | xargs -i svn diff -rHEAD:{} some_file.xxx > ~/file_history.txt
one-liner kecil yang bagus (awk tidak sama dengan cut)
Perintah "menyalahkan" bernama aneh melakukan ini. Jika Anda menggunakan Kura-kura, itu memberi Anda dialog "dari revisi", kemudian daftar file dengan indikator baris per baris dari angka Revisi dan penulis di sebelahnya.
Jika Anda mengklik kanan pada info revisi, Anda dapat memunculkan dialog "Tampilkan log" yang memberikan informasi checkin lengkap, bersama dengan file lain yang merupakan bagian dari checkin.
Sejauh yang saya tahu tidak ada perintah svn dibangun untuk mencapai ini. Anda perlu menulis skrip untuk menjalankan beberapa perintah untuk membangun semua diff. Pendekatan yang lebih sederhana adalah menggunakan klien svn GUI jika itu merupakan opsi. Banyak dari mereka seperti plugin subversif untuk Eclipse akan mencantumkan riwayat file serta memungkinkan Anda untuk melihat perbedaan dari setiap revisi.
Terima kasih, Bendin. Saya sangat menyukai solusi Anda.
Saya mengubahnya untuk bekerja dalam urutan terbalik, menunjukkan perubahan terbaru terlebih dahulu. Yang penting dengan kode lama, dipertahankan selama beberapa tahun. Saya biasanya menyalurkannya ke lebih banyak.
svnhistory elements.py |more
Saya menambahkan -r ke semacam itu. Saya menghapus spec. menangani 'catatan pertama'. Itu akan kesalahan pada entri terakhir, karena tidak ada yang berbeda dengannya. Meskipun saya hidup dengan itu karena saya tidak pernah turun sejauh itu.
#!/bin/bash
# history_of_file
#
# Bendin on Stack Overflow: http://stackoverflow.com/questions/282802
# Outputs the full history of a given file as a sequence of
# logentry/diff pairs. The first revision of the file is emitted as
# full text since there's not previous version to compare it to.
#
# Dlink
# Made to work in reverse order
function history_of_file() {
url=$1 # current url of file
svn log -q $url | grep -E -e "^r[[:digit:]]+" -o | cut -c2- | sort -nr | {
while read r
do
echo
svn log -r$r $url@HEAD
svn diff -c$r $url@HEAD
echo
done
}
}
history_of_file $1
Saya telah melihat banyak jawaban parsial saat meneliti topik ini. Inilah yang bekerja untuk saya dan berharap itu membantu orang lain. Perintah ini akan menampilkan output pada baris perintah, menampilkan nomor revisi, penulis, stempel waktu revisi dan perubahan yang dilakukan:
svn blame -v <filename>
Untuk membuat pencarian Anda lebih mudah, Anda dapat menulis output ke file dan menerima apa yang Anda cari.