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. Những gì tôi muốn là một sự khác biệt cho mỗi sửa đổi đã thay đổi tập tin. Là một lệnh như vậy có sẵn?Làm cách nào tôi có thể xem tất cả các thay đổi lịch sử đối với một tệp trong SVN
Trả lời
Không có built-in lệnh 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 [email protected]
svn cat -r$r [email protected]
echo
# remaining revisions as differences to previous revision
while read r
do
echo
svn log -r$r [email protected]
svn diff -c$r [email protected]
echo
done
}
}
Sau đó, bạn có thể gọi nó với:
history_of_file $1
Tôi chưa bao giờ thấy rằng "piping vào lừa khối" lừa trước. Khéo léo. –
[Phiên bản tệp hàng loạt] (http://stackoverflow.com/questions/5622367/generate-history-of-changes-on-a-file-in-svn/5721533#5721533) của tập lệnh này, fwiw. – ladenedge
Tôi đã thêm tệp này vào tệp .bashrc của mình. Khi tôi bắt đầu, tôi nhận được 'svn: '.' không phải là bản sao làm việc svn: Lỗi cú pháp trong đối số sửa đổi '@HEAD' svn: Lỗi cú pháp trong đối số sửa đổi '@ HEAD'' – Francisc0
Bạn có thể sử dụng git-svn
để nhập kho lưu trữ vào kho lưu trữ Git, sau đó sử dụng git log -p filename
. Điều này cho thấy mỗi mục nhập nhật ký cho tệp theo sau là khác biệt tương ứng.
Cài đặt git, tạo kho lưu trữ git, sử dụng lệnh git? Câu hỏi đã được gắn thẻ và hỏi về Subversion. –
Tôi sử dụng git làm ứng dụng Subversion với git-svn. Đây là cách tôi sẽ thực hiện thao tác log + diff đối với kho lưu trữ Subversion. Git có một số công cụ thực sự tuyệt vời để xem kho lưu trữ, nó không phải là một ý tưởng kỳ lạ như vậy. –
Trên một người nào đó (đúng) chúc mừng viết một kịch bản hay - để cung cấp chức năng không có trong SVN. Thấy rằng git là địa phương, trừ khi bạn đẩy, bạn có thể gọi dụng cụ này, không cần phải nhận được tất cả khó chịu về mọi thứ. –
Theo như tôi biết không có lệnh svn được xây dựng để 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 diffs. Một cách tiếp cận đơn giản hơn là sử dụng một trình khách svn GUI nếu đó là một tùy chọn. Nhiều người trong số họ chẳng hạn 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 sự khác biệt của mỗi bản sửa đổi.
Bắt đầu với
svn log -q file | grep '^r' | cut -f1 -d' '
Điều đó sẽ giúp bạn có được một danh sách các phiên bản mà tập tin đã thay đổi, sau đó bạn có thể sử dụng cho các cuộc gọi kịch bản lặp đi lặp lại để svn diff
.
hoặc ... tiếp tục! '' 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'' đẹp nhỏ một lót (awk không giống như cắt) – Kasapo
Hơi khác với những gì bạn mô tả , nhưng tôi nghĩ rằng đâ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 trước cố định theo thời gian và tác giả của cam kết thay đổi lần cuối.
Điều này thật tuyệt vời! Được sử dụng SVN trong nhiều năm và không bao giờ biết về điều này: O –
Bạn có thể cần tùy chọn verbose/-v để xem dấu thời gian (tôi làm với bản dựng mặc định của tôi là svn 1.7.9). –
giáo sư của tôi đã viết plugin đổ lỗi ban đầu cho svn. Tôi vẫn phải nhìn cái này. Anh ấy hoàn toàn tự điền vào nhiệm vụ này. : P –
Lệnh "đổ lỗi" được đặt 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 một hộp thoại "từ bản sửa đổi", sau đó một danh sách tệp với một dòng theo chỉ báo dòng của số sửa đổi và tác giả bên cạnh nó.
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ý.
Thats rất hữu ích, nhưng không phải những gì OP đang tìm kiếm, đó là một lịch sử đầy đủ của tập tin, không chỉ là những đóng góp lịch sử của tập tin hiện tại. Lịch sử đầy đủ đó hữu ích khi nhìn lại để tìm ra lý do tại sao một số mã nhất định bị xóa hoặc thay đổi và khi nào. –
Ngược lại, tên khá đúng. Nó cho bạn biết ai để đổ lỗi cho một đoạn mã đặc biệt (crappy/buggy/uncomprehendable). –
Nó sẽ không được tốt nếu tên rõ ràng cho lệnh là "tín dụng" hơn là "đổ lỗi"? :) – Nick
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ó để hoạt động theo thứ tự ngược lại, hiển thị những thay đổi gần đây nhất trước tiên. Điều quan trọng với mã đứng lâu, được duy trì trong vài năm. Tôi thường ống nó vào nhiều hơn.
svnhistory elements.py |more
tôi thêm -r để phân loại. Tôi đã xóa thông số. xử lý cho 'kỷ lục đầu tiên'. Nó là nó sẽ lỗi ra trên mục nhập cuối cùng, vì không có gì để khác biệt với nó. Mặc dù tôi đang sống với nó bởi vì tôi không bao giờ đi xuống xa đến thế.
#!/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 [email protected]
svn diff -c$r [email protected]
echo
done
}
}
history_of_file $1
Nếu bạn muốn xem toàn bộ lịch sử của một tập tin với những thay đổi mã:
svn log --diff [path_to_file] > log.txt
Tôi không biết khi nào tùy chọn --diff đã được thêm nhưng nó hoạt động với svn 1.8.10, vì vậy không cần một tập lệnh bash –
Tôi nghĩ, svn 1.7.4 đã giới thiệu tùy chọn '--diff' từ nó có các thử nghiệm cho tùy chọn trong khi 1.7.3 không có gì cả - 'subversion/tests/cmdline/log_tests.py'. – valid
Chỉ cần một lưu ý nhỏ: tùy thuộc vào độ dài của lịch sử, điều này có thể mất khá nhiều thời gian trước khi tệp log.txt được hoàn trả hoàn toàn (mặc dù nó sẽ có thể đọc được ngay lập tức). –
- 1. Xem tất cả các tệp đã thay đổi trong TFS
- 2. Làm thế nào tôi có thể viết lại lịch sử để tất cả các tệp, ngoại trừ các tệp tôi đã di chuyển, nằm trong thư mục con?
- 3. Đặt tất cả các tệp đã thay đổi vào danh sách thay đổi trong SVN
- 4. Tôi làm cách nào để trình duyệt có thể xem các thay đổi CSS và Javascript?
- 5. Làm thế nào tôi có thể theo dõi/quan sát tất cả các thay đổi trong một biểu đồ con?
- 6. Tôi làm cách nào để xem tất cả lịch sử bash?
- 7. Có thể xem lịch sử của một dòng trong SVN không?
- 8. Làm thế nào tôi có thể bỏ qua thay đổi eol và tất cả không gian màu trắng trong svn?
- 9. Xem các thay đổi đối với một tệp cụ thể bằng git
- 10. Cách xem lịch sử sửa đổi cho tệp Mercurial?
- 11. Lịch sử thay đổi đối với một dòng mã cụ thể trong Subversion
- 12. Mercurial - Xem tất cả các thay đổi sửa đổi dòng cụ thể trong tập tin
- 13. Làm cách nào để xuất tất cả các tệp đã thay đổi/thêm vào từ Git?
- 14. xem tất cả lịch sử của git
- 15. Cách cam kết tất cả các tệp ngoại trừ một tệp với SVN
- 16. Làm cách nào tôi có thể đổi tên tất cả các chỉ mục trong MySQL
- 17. Làm thế nào để đổi tên một cách thanh lịch tất cả các khóa trong một băm trong Ruby?
- 18. Làm cách nào để thực hiện các thay đổi đối với SVN External?
- 19. Làm thế nào tôi có thể thay đổi tiền tố trong tất cả các bảng trong MySQL DB của tôi?
- 20. Làm cách nào tôi có thể biết tất cả các thẻ trong Mercurial?
- 21. Làm cách nào tôi có thể lấy tệp tininfo của tất cả các tệp trong một thư mục bằng GetFile()?
- 22. Làm cách nào để xem các tệp Tất cả Checkout trong một dự án trong VSS?
- 23. Làm cách nào để xem nhật ký hợp nhất các thay đổi đối với một tập hợp các tệp trong lực lượng?
- 24. Git: Hiển thị tất cả các thay đổi khác nhau cho một dòng trong một tệp được chỉ định trong toàn bộ lịch sử git
- 25. SVN - Nhận tất cả thư cam kết cho một tệp?
- 26. Làm cách nào để thay đổi đối chiếu tất cả các hàng từ latin1_swedish_ci thành utf8_unicode_ci?
- 27. Làm cách nào để có danh sách các tệp đã thay đổi trong svn?
- 28. Làm cách nào để tôi có thể kéo --rebase nhưng thực hiện tất cả các thay đổi từ xa?
- 29. Xem các thay đổi DOM, cách thanh lịch
- 30. Làm cách nào để tôi có thể thay đổi ICB của đối tượng là một ObservableCollection?
Nó ẩn trong tên kỳ quặc "đổ lỗi" lệnh. – goosemanjack
Tôi nghĩ @goosemanjack đang nói đùa, cho đến khi tôi thử nó. –