Tôi biết rằng tôi có thể svn diff -r a:b repo
xem các thay đổi giữa hai phiên bản được chỉ định. Điều tôi muốn là một khác biệt cho mọi sửa đổi đã thay đổi tệp. Là một lệnh như vậy có sẵn?
Tôi biết rằng tôi có thể svn diff -r a:b repo
xem các thay đổi giữa hai phiên bản được chỉ định. Điều tôi muốn là một khác biệt cho mọi sửa đổi đã thay đổi tệp. Là một lệnh như vậy có sẵn?
Câu trả lời:
Không có lệnh tích hợp cho nó, vì vậy tôi thường chỉ làm một cái gì đó như thế này:
#!/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
}
}
Sau đó, bạn có thể gọi nó bằng:
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]
hoạt động chính xác như thế này! stackoverflow.com/a/24938573/3185510
Hơi khác với những gì bạn mô tả, nhưng tôi nghĩ đây có thể là những gì bạn thực sự cần:
svn blame filename
Nó sẽ in tệp với mỗi dòng có tiền tố theo thời gian và tác giả của cam kết cuối cùng đã thay đổi nó.
Nếu bạn muốn xem toàn bộ lịch sử của một tệp có thay đổi mã:
svn log --diff [path_to_file] > log.txt
--diff
vì nó có các thử nghiệm cho tùy chọn trong khi 1.7.3 không có - subversion/tests/cmdline/log_tests.py
.
--limit <number>
tùy chọn. Giống như vậy:svn log --diff --limit 5 [path_to_file]
Bạn có thể sử dụng git-svn
để nhập kho lưu trữ vào kho Git, sau đó sử dụng git log -p filename
. Điều này cho thấy mỗi mục nhật ký cho tệp theo sau là khác.
git log X..Y -o filename
Bắt đầu với
svn log -q file | grep '^r' | cut -f1 -d' '
Điều đó sẽ giúp bạn có một danh sách các bản sửa đổi trong đó tệp đã thay đổi, sau đó bạn có thể sử dụng để kịch bản các cuộc gọi lặp lại 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
một miếng lót nhỏ xinh (awk cũng giống như cắt)
Lệnh "đổ lỗi" có tên kỳ quặc thực hiện điều này. Nếu bạn sử dụng Rùa, nó sẽ cung cấp cho bạn hộp thoại "từ sửa đổi", sau đó liệt kê tệp có chỉ báo từng dòng của số Sửa đổi và tác giả bên cạnh.
Nếu bạn nhấp chuột phải vào thông tin sửa đổi, bạn có thể hiển thị hộp thoại "Hiển thị nhật ký" cung cấp thông tin đăng ký đầy đủ, cùng với các tệp khác là một phần của đăng ký.
Theo tôi biết, không có lệnh svn tích hợp để thực hiện việc này. Bạn sẽ cần phải viết một kịch bản để chạy một số lệnh để xây dựng tất cả các khác biệt. Một cách tiếp cận đơn giản hơn sẽ là sử dụng máy khách GUI svn nếu đó là một tùy chọn. Nhiều trong số chúng như plugin lật đổ cho Eclipse sẽ liệt kê lịch sử của một tệp cũng như cho phép bạn xem độ lệch của mỗi lần sửa đổi.
Cảm ơn, Bendin. Tôi thích giải pháp của bạn rất nhiều.
Tôi đã thay đổi nó để làm việc theo thứ tự ngược lại, hiển thị hầu hết các thay đổi gần đây đầu tiên. Điều này rất quan trọng với mã lâu dài, được duy trì trong nhiều năm. Tôi thường ống nó vào nhiều hơn.
svnhistory elements.py |more
Tôi đã thêm -r vào loại. Tôi loại bỏ spec. xử lý cho 'hồ sơ đầu tiên'. Đó là lỗi sẽ xuất hiện ở mục cuối cùng, vì không có gì khác với nó. Mặc dù tôi đang sống với nó bởi vì tôi không bao giờ đi quá xa.
#!/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
Tôi đã thấy một loạt các câu trả lời một phần trong khi nghiên cứu chủ đề này. Đây là những gì làm việc cho tôi và hy vọng nó sẽ giúp đỡ người khác. Lệnh này sẽ hiển thị đầu ra trên dòng lệnh, hiển thị số sửa đổi, tác giả, dấu thời gian sửa đổi và các thay đổi được thực hiện:
svn blame -v <filename>
Để làm cho tìm kiếm của bạn dễ dàng hơn, bạn có thể viết đầu ra vào một tệp và grep cho những gì bạn đang tìm kiếm.