Tôi có thể nhận git để cho tôi biết tất cả các tệp mà một người dùng đã sửa đổi không?


147

Tôi muốn git cung cấp cho tôi danh sách tất cả các tệp được sửa đổi bởi một người dùng, trên tất cả các cam kết.

Trường hợp sử dụng cụ thể của tôi là tôi đã tham gia vào dự án i18n của ruby ​​on rails và chúng tôi muốn biết những tập tin nào đã được thực hiện và những tập tin nào vẫn cần phải thực hiện. Người dùng trong câu hỏi chỉ thực hiện công việc trên i18n, không phải trên phần còn lại của cơ sở mã. Vì vậy, tất cả các thông tin nên có trong git, nhưng tôi không chắc làm thế nào để lấy nó ra.

Câu trả lời:


127

Đây không phải là cách duy nhất, nhưng nó hoạt động:

git log --pretty="%H" --author="authorname" |
    while read commit_hash
    do
        git show --oneline --name-only $commit_hash | tail -n+2
    done | sort | uniq

Hoặc, như một dòng:

git log --pretty="%H" --author="authorname" | while read commit_hash; do git show --oneline --name-only $commit_hash | tail -n+2; done | sort | uniq

184

Điều này sẽ cung cấp cho bạn một danh sách các tập tin đơn giản, không có gì khác:

git log --no-merges --author="Pattern" --name-only --pretty=format:"" | sort -u

Chuyển đổi - tác giả cho --committer khi cần thiết.


1
--name-onlyxuất hiện để làm cho đầu ra không có gì ngoài tên tệp. Với thực tế đó, các tùy chọn --stat--pretty=format:""hoàn thành là gì? Bạn có thể để chúng ra ngoài?
Giô-na

1
@Jonah --pretty = định dạng: "" là cần thiết. Tôi chỉnh sửa câu trả lời.
Ian Kelling

2
hoạt động rất tốt, mặc dù một trục trặc nhỏ: nó tạo ra một liên kết trống khi bắt đầu xuất, điều đó có nghĩa là đường ống kết quả thông qua 'wc -l' để có được số lượng tệp bị tắt bởi 1.
joachim

Làm thế nào tôi có thể loại trừ các tập tin đã bị xóa?
Tim Boland

8

Hãy thử git log --stat --committer=<user>. Chỉ cần đặt tên người dùng vào --committer=tùy chọn (hoặc sử dụng --author=khi thích hợp).

Điều này sẽ nhổ tất cả các tệp trên mỗi cam kết, do đó có thể sẽ có một số trùng lặp.


0
git log --pretty= --author=@abcd.com --name-only | sort -u | wc -l

Hiển thị tất cả các tệp sửa đổi của công ty trong repo git.

git log --pretty= --author=user@abcd.com --name-only | sort -u | wc -l

Hiển thị tất cả các tệp sửa đổi theo tên tác giả 'người dùng' trong repo git.

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.