2010-08-10 23 views
5

Có cách nào tiêu chuẩn để liệt kê tất cả các cam kết được thực hiện bởi những người khác (tức là bản thân tôi không) trong một kho git?Danh sách các cam kết của những người khác (nghĩa là không phải tôi)?

Tôi đã thử git log --not --author=username, nhưng có vẻ như --not chỉ áp dụng cho các bản sửa đổi. Trang manpage cho git log dường như không cung cấp cách đảo ngược các biến vị ngữ như --author.

(tôi sử dụng git-svn tại nơi làm việc, và muốn có một cách để xem những gì các đồng nghiệp của tôi đã thay đổi kể từ khi tôi cuối cùng chạy git svn rebase, hoặc tổng quát hơn trong X ngày qua. Nói chung tôi biết những gì tôi đã thay đổi, tôi chỉ muốn xem cái nào file đã được xúc động bởi những người khác/đọc của họ cam kết thông điệp log/có thể xem xét thú vị bản vá lỗi/vv)

Edit:phạm vi tinh, tôi thực sự quan tâm nhiều hơn trong "thời gian gần đây" hơn "kể từ lần cuối git svn rebase".

+0

Dường như bạn có thể tránh tìm kiếm tác giả này. Tôi không sử dụng git-svn, nhưng 'git svn rebase' được ghi lại là tìm nạp rồi rebasing, vì vậy chắc chắn nó cập nhật ref trong' refs/remotes/git-svn'. Bạn không thể làm một cái gì đó như 'git log master @ {1} .. git-svn'? – Cascabel

+0

Tôi có thể dễ dàng nhìn thấy các bản vá "chưa được vá" của tôi với 'git log git-svn..' và ngược lại, nhưng điều tôi thực sự muốn là có thể thấy những thay đổi được thực hiện" gần đây "của người khác, nói 3 ngày qua. Tác giả tìm kiếm có vẻ là cách duy nhất, như các đối tượng cam kết/blobs và như vậy được viết lại bởi 'git svn rebase', như bạn nói. – RobM

+0

Vì vậy, một lần nữa, có gì sai với 'git log git-svn' hoặc' git log master @ {1} .. git-svn'? Không nên lịch sử trông giống như '-o-o-o (git-svn) -o-o-o (chủ) '? – Cascabel

Trả lời

5

Đây không phải là một giải pháp thực sự, nhưng đối với những gì nó có giá trị, bạn có thể kludge một cái gì đó bằng cách sử dụng thực tế là --author sử dụng một trận đấu regex. Nếu tên của bạn là, giả sử, Jefromi:

git log --author='^[^J]\|J[^e]\|Je[^f]' # and so on 

Nó khá crappy, nhưng nó có thể đủ tốt cho mục đích của bạn. (Và nó ngắn hơn nếu không có tên nào khác bắt đầu bằng các chữ cái giống như tên của bạn.)

Gần đây, ngoài việc sử dụng các nhánh để thu hẹp phạm vi của bạn (start..end, ^stop1 ^stop2 branch, v.v.), bạn có thể sử dụng tùy chọn --since=<date>.

+0

Không phải là một ý tưởng tồi! Bạn có biết hương vị của regex 'git log' sử dụng không? – RobM

+0

@RobM: Git xử lý regex về cơ bản như grep - với tất cả các lệnh sử dụng nó, đó là regex cơ bản theo mặc định, sau đó có '-i' (bỏ qua trường hợp),' -E' (mở rộng regex) và '-F '(các chuỗi cố định). – Cascabel

2
git log --perl-regexp --author='^(?!RobM)' 

Giải thích: neo regexp vào đầu chuỗi bằng ^; sau đó sử dụng xem trước (?!whatever) để cấm tên của bạn xuất hiện sau vị trí đó. Bằng cách này, bạn thậm chí có thể loại trừ cam kết của một số tác giả:

git log --perl-regexp --author='^(?!jack|jill)' 
Các vấn đề liên quan