2011-07-29 47 views
13

Tôi đang sử dụng SVN cho dự án. với svn log -l 10, tôi có thể nhận được 10 cam kết cuối cùng cho thư mục này, với id sửa đổi, thông điệp tường trình, v.v. Có lệnh SVN nào cho phép tôi in ra dòng lệnh tất cả các khác biệt cho từng thay đổi đó không? Tôi muốn làm một số grepping/etc. với X khác nhau cuối cùng?In cuối 10/20/... svn thông điệp tường trình khác với

Trả lời

21

Trong SVN v1.7, có các tùy chọn

--diff     : produce diff output 
--diff-cmd ARG   : use ARG as diff command 

mà bạn có thể sử dụng với svn log

Đối với phiên bản cũ (mà có lẽ trường hợp của bạn), bạn sẽ phải làm một số kịch bản để cung cấp bản sửa đổi cho svn diff và nhận kết quả

+0

Cool! Chưa được phát hành, và không có trên trình quản lý gói ubuntu của tôi, nhưng tốt để biết rằng nó đang đến. – Rory

+0

@Rory - chúng có sẵn ở đây, nhưng phải được phát hành trước. Tôi đang sử dụng 1.7. http://subversion.apache.org/packages.html#pre-release – manojlds

1

Giả sử bạn đang sử dụng Linux, hãy sử dụng tập lệnh sau. lưu nó như svn-diffs.sh. Sau đó, chạy

sh svn-diffs.sh 10 

Điều này sẽ thêm nội dung được phân biệt vào tệp theo diff/dir mới được tạo. Bằng cách đó, bạn có thể grep thông qua mà không đáng lo ngại về độ trễ sau này. Điều này làm việc trong các thử nghiệm của tôi. Bạn có thể grep thông qua các tập tin theo diffs/dir riêng biệt để có đầu ra màu.

#!/bin/bash 
# Author - Kasun Gajasinghe 
HEAD="HEAD" 
limit=${1} 
[[ -z "$1" ]] && limit=10 

revisions=$(svn log -l $limit | grep -r "r[0-9][0-9]*\w" -o | grep -r "[0-9][0-9]*" -o) 
mkdir diffs 
echo $revisions > diffs/revisions.log 

for revision in ${revisions} 
do 
#  svn diff -r $revision:${HEAD} } | grep -ri "SEARCHME" || exit 1 

     diff=$(svn diff -r $revision:${HEAD}) 
     echo "$diff" > diffs/diffs-$revision-$HEAD.log 
     echo "=======================" >> diffs/diffs-$revision-$HEAD.log 
     HEAD=$revision 
done 

grep -ri "searchme" diffs/ 
2

Đối với svn cũ hơn, bạn có thể sử dụng chức năng:

svn-log-diff() 
{ 
     for c in `svn log "[email protected]" | grep '^r' | cut -f1 -d ' ' | sed s/r/-c/`; do 
      svn diff --force $c || break 
     done 
} 
+0

Không hiệu quả với tôi - có điều gì sai với 'sed'? – larsr

+0

Đã thử nghiệm trên Ubuntu. Nó hoạt động. – Const

+0

Nó hoạt động. Và tôi đã thêm một lệnh khác bên trong vòng lặp: 'svn log -v $ c', vì vậy tôi có thể thấy các thông báo commit AND diffs ở cùng một vị trí (nhưng nó chậm vì nó phải thực hiện tra cứu thứ hai). –

Các vấn đề liên quan