Làm thế nào để bạn thấy các mục nhật ký SVN gần đây?


194

svn logra một danh sách dài vô dụng, vô dụng trên một dòng lệnh. Tôi không biết tại sao đó là mặc định. Nếu tôi muốn đọc (hoặc thậm chí có thể đọc) 300 mục trên thiết bị đầu cuối, tôi sẽ không ngại gõ svn log --fullhoặc một cái gì đó tương tự.

Có lẽ các anh chàng SVN đang nghĩ rằng tôi muốn cung cấp đầu ra đó cho một chương trình khác. Tuy nhiên, nếu đó là trường hợp, sẽ có ý nghĩa hơn khi có cuộc gọi dài hơn cho chương trình - không phải người dùng thiết bị đầu cuối.

Dù sao, làm thế nào để tôi chỉ xem một số hoạt động gần đây như 5 hoặc 10 mục cuối cùng để xem những gì đã thay đổi?


9
Vâng, nó thực sự nên làm việc như, ừm git log.
Paul Draper

Câu trả lời:


261

limit tùy chọn, ví dụ:

svn log --limit 4

svn log -l 4

Chỉ có 4 mục cuối


127

Bên cạnh những gì Bert F đã nói , nhiều lệnh, bao gồm logcó tùy chọn -r(hoặc --revision). Sau đây là một số ví dụ thực tế sử dụng tùy chọn này để hiển thị phạm vi sửa đổi:

Để liệt kê mọi thứ theo thứ tự tăng dần:

svn log -r 1:HEAD

Để liệt kê mọi thứ theo thứ tự giảm dần:

svn log -r HEAD:1

Để liệt kê tất cả mọi thứ từ thứ mười ba đến cơ sở của bản sửa đổi hiện đang được kiểm tra theo thứ tự tăng dần:

svn log -r 13:BASE

Để có được mọi thứ giữa các ngày nhất định:

svn log -r {2011-02-02}:{2011-02-03}

Bạn có thể kết hợp tất cả các biểu thức trên với --limittùy chọn, để bạn có thể kiểm soát khá chi tiết những gì được in. Để biết thêm thông tin về các -rbiểu thức này, hãy tham khảo svn help loghoặc chương có liên quan trong sách Kiểm soát phiên bản với Subversion


8
Rất cám ơn lời giải thích đó, @Daniel Dinnyes - Tôi thường gặp vấn đề ngược lại từ OP: chỉ svn log .có thể trả lại bản sửa đổi sớm nhất cho tôi (tương tự như vậy với svn log --limit 4 .); nhưng nếu tôi gọi svn log -r HEAD:1 ., thì cuối cùng tôi cũng nhận được tất cả các mục được liệt kê ... Cảm ơn lần nữa - chúc mừng!
sdaau

Điều này là tốt hơn, vì svn log chỉ hiển thị lịch sử thay đổi của đường dẫn hiện tại.
Ninja

41

Tôi thích sử dụng -vcho chế độ dài dòng.
Nó sẽ cung cấp cho bạn id xác nhận, nhận xét và tất cả các tệp bị ảnh hưởng.

svn log -v --limit 4

Ví dụ về đầu ra:

I added some migrations and deleted a test xml file
------------------------------------------------------------------------
r58687 | mr_x | 2012-04-02 15:31:31 +0200 (Mon, 02 Apr 2012) | 1 line Changed
paths: 
A /trunk/java/App/src/database/support    
A /trunk/java/App/src/database/support/MIGRATE    
A /trunk/java/App/src/database/support/MIGRATE/remove_device.sql
D /trunk/java/App/src/code/test.xml

2
Tùy chọn verbose cực kỳ hữu ích
Jason George

Và nếu nhóm dev thực sự ngọt ngào, họ sẽ đưa id vấn đề vào bình luận svn và bạn có thể dễ dàng tìm thấy vấn đề được kết nối với cam kết.
Jonas Söderström

11

Đưa đầu ra qua lesshoặc máy nhắn tin khác:

svn log | less

1
Nếu bạn có bản sửa đổi> 23k, bạn vẫn sẽ đợi ~ 20 giây để xem các mục đầu tiên (và khi không sử dụng nhật ký dài dòng). Nhưng nó thật tuyệt - hiển thị gần đây nhất ở trên cùng. Và tốt hơn so với phân trang 100 lần một lần của TortoiseSVN! Khi bạn muốn quay trở lại.
Tomasz Gandor

6

Trong trường hợp bất kỳ ai đang xem câu hỏi cũ này, một lệnh hữu ích để xem các thay đổi kể từ lần cập nhật cuối cùng của bạn:

svn log -r $(svn info | grep Revision | cut -f 2 -d ' '):HEAD -v

LE (cảm ơn Gary vì đã bình luận)
điều tương tự, nhưng ngắn hơn và logic hơn nhiều:

svn log -r BASE:HEAD -v


8
hoặc chỉsvn log -r BASE:HEAD -v
Gary

5

Để thêm vào những gì người khác đã nói, bạn cũng có thể tạo bí danh trong tệp .bashrc hoặc .bash_aliases của mình:

alias svnlog='svn log -l 30 | less'

hoặc bất cứ điều gì bạn muốn làm mặc định của bạn


4

Vì bạn đã nhận thấy svn loglệnh đã chạy mà không có bất kỳ đối số nào hiển thị tất cả các thông báo nhật ký liên quan đến URL bạn chỉ định hoặc thư mục sao chép hoạt động nơi bạn chạy lệnh.

Bạn luôn có thể tinh chỉnh / giới hạn svn logkết quả:

  • svn log --limit NUM sẽ chỉ hiển thị NUM bản sửa đổi đầu tiên,
  • svn log --revision REV1(:REV2) sẽ hiển thị thông báo nhật ký cho sửa đổi REV1 hoặc cho phạm vi REV1 - REV2,
  • svn log --searchsẽ hiển thị các bản sửa đổi phù hợp với mẫu tìm kiếm mà bạn chỉ định (lệnh có sẵn trong Subversion 1.8 và ứng dụng khách mới hơn). Bạn có thể tìm kiếm theo
    • tác giả sửa đổi (tức là tên người dùng),
    • ngày sửa đổi được cam kết,
    • sửa đổi văn bản bình luận (thông điệp tường trình),
    • danh sách các đường dẫn thay đổi trong sửa đổi.

4

Câu trả lời này hướng vào các câu hỏi tiếp theo liên quan đến các tùy chọn của Subversion. Đối với mọi tiểu ban có sẵn (ví dụ: thêm, nhật ký, trạng thái ...), bạn chỉ cần thêm --helptùy chọn để hiển thị danh sách đầy đủ các tùy chọn có sẵn mà bạn có thể sử dụng với tiểu ban cũng như các ví dụ về cách sử dụng chúng. Đoạn mã sau được lấy trực tiếp từ svn log --helpđầu ra lệnh trong phần "ví dụ":

Show the latest 5 log messages for the current working copy
directory and display paths changed in each commit:
  svn log -l 5 -v

3

Nhưng nhật ký svn vẫn theo thứ tự ngược lại, tức là hầu hết các mục gần đây là đầu ra đầu tiên, cuộn khỏi đầu thiết bị đầu cuối của tôi và biến mất. Tôi thực sự muốn xem các mục cuối cùng, tức là thứ tự sắp xếp phải theo thứ tự thời gian. Lệnh duy nhất thực hiện điều này dường như svn log -r 1:HEADnhưng nó mất quá nhiều thời gian trên một kho lưu trữ với khoảng 10000 mục. Tôi đã nghĩ ra cái này:

Hiển thị 10 mục lật đổ cuối cùng theo thứ tự thời gian:

svn log -r $(svn log -l 10 | grep '^r[0-9]* ' | tail -1 | cut -f1 -d" "):HEAD
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.