2010-02-08 34 views
11

Nền: viết tập lệnh tự động phát hành để xuất các tệp đã thay đổi giữa các phiên bản từ SVN và tải lên máy chủ từ xa.cách phát hiện các thuộc tính đã sửa đổi sử dụng nhật ký SVN

Lệnh nhật ký svn hiển thị các tệp đã sửa đổi thuộc tính, nhưng dường như không phân biệt đầu ra tiết của nó giữa sửa đổi nội dung qua sửa đổi thuộc tính.

Tôi đọc đầu ra này sai, hoặc là có một cách dễ dàng để có được một danh sách các tập tin thay đổi giữa các phiên bản trong khi phớt lờ prop những thay đổi

Dưới đây là cmd mẫu của tôi:

#: svn log "someurl" -r 2210:HEAD -v -q 

Output: 
------------------------------------------------------------------------ 
r2211 | author | 2010-02-08 12:36:56 +1300 (Mon, 08 Feb 2010) 
Changed paths: 
    M /branches/project/release-v1-r-maintenance 
    M /branches/project/release-v1-r-maintenance/offroot/ 
    M /branches/project/release-v1-r-maintenance/offroot/test.config 
------------------------------------------------------------------------ 

Đỉnh hai là chỉ thay đổi prop (mergeinfo, bỏ qua, vv), trong khi mục thứ 3 là một nội dung chỉnh sửa thực tế và đây là mục thực mà tôi muốn lấy để tránh xuất toàn bộ root.

Có cách nào để lấy/lọc ra chỉ những thay đổi nội dung từ nhật ký svn hoặc lệnh khác.

Trả lời

0

Tính năng này có hoạt động không?

svn log --xml --with-no-revprops 
+0

không có. điều này chỉ ảnh hưởng đến các thuộc tính "sửa đổi" – jeroenh

+0

Máy chủ svn của tôi là phiên bản 1.5.1 và --with-no-revprops không có sẵn trên svn-log cmd. Đây có phải là tính năng mới hơn không? Thời gian để nâng cấp repo của tôi? – Dan

+0

@Dan: vâng, đó là một tính năng mới trong 1,6 – jeroenh

1

Tôi nghĩ rằng cách duy nhất là để thực sự phân tích đầu ra khác cho mỗi revistion, mặc dù điều đó có vẻ khá giòn, và có lẽ rất chậm ...

Đây là cách một mục khác trông cho một tập tin với tính chất chỉ thay đổi:

c:\test\wc>svn diff -c 3 

Property changes on: test.txt 
___________________________________________________________________ 
Added: test 
    + test 

Đây là cách một entry khác sẽ tìm kiếm một tập tin với nội dung thay đổi và tính thay đổi:

c:\test\wc>svn diff -c 4 
Index: test.txt 
=================================================================== 
--- test.txt (revision 3) 
+++ test.txt (revision 4) 
@@ -1 +1,2 @@ 

+asdfads 

Property changes on: test.txt 
___________________________________________________________________ 
Added: someproperty 
    + somepropertyvalue 
+0

Yeh, là loại tránh câu trả lời đó vì đầu ra có vẻ lộn xộn và có thể không đáng tin cậy. Mặc dù đây có lẽ là lựa chọn duy nhất trừ khi bất kỳ ai khác có một số ý tưởng. Giả sử chuỗi 'Chỉ số: ' luôn xuất hiện khi có thay đổi nội dung, thì tôi đoán có một số phạm vi để phân tích cú pháp. Hmm, cảm ơn cho đầu vào. – Dan

4

Đây là tập lệnh tôi vừa viết để nhận nhật ký chi tiết của tất cả các bản sửa đổi trong đó thuộc tính thay đổi bên trong thư mục svn hiện tại khi hoàn thành. Chỉ cần đặt phiên bản bắt đầu và kết thúc phù hợp nơi bạn đoán sự biến đổi đã xảy ra. Nó không phải là rất nhanh, nhưng nó hoạt động.

#!/bin/bash 
# Show the verbose log of the revisions, where svn properties 
# inside the current folder where added/removed 
startrev=4600 
endrev=4620 
for i in $(eval echo {$startrev..$endrev}) 
    do 
    svn diff -c $i 2>/dev/null | grep "Property changes on" 1>/dev/null 
    if [ $? == 0 ]; then 
     echo "Property change in revision $i:" 
     svn log -r $i --verbose 
    fi 
done 
+0

Điều này rất hữu ích, tuy nhiên nó không hoạt động (đối với tôi). Tôi đang sử dụng Cygwin svn khách hàng và thiết lập startrev để sửa đổi tôi biết có những thay đổi tài sản trong, và endrev đến số sửa đổi tiếp theo. Không có đầu ra để std ra và 'echo $?' Cho 0. – andersand

+0

Ồ, tôi dường như (không muốn) có một miền địa phương khác trên máy khách svn của tôi. Điều đó giải thích lý do tại sao grep không tìm thấy bất cứ điều gì ^^ – andersand

1

Tôi biết câu hỏi này đã được trả lời, nhưng trong trường hợp bất cứ ai muốn có một hướng dẫn nhỏ, tôi đã thực hiện bài viết này về how to get get queryable data from svn log/diff (bao gồm các kịch bản bash, XSLT và các kịch bản cơ sở dữ liệu oracle). Việc làm này cho phép bạn chạy tất cả các loại truy vấn hữu ích chống lại quan điểm v_svnlog

file "nóng" trong bản vá này:

select path, count(*) num from v_svnlog 
group by path 
order by num desc, path asc 

nhất kiểm tra bởi tác giả

select author, count(*) num from v_svnlog 
where path like '%Test%' 
group by author 
order by num desc 

và vân vân .. .

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