Cách đơn giản nhất để lấy ngày cam kết cuối cùng cho một loạt tệp trong kho lưu trữ Git (tức là, đối với mỗi tệp, ngày cam kết cuối cùng đã thay đổi tệp đó)? Bối cảnh cho điều này là tôi đang sử dụng các lệnh Bash khác để tìm một danh sách dài các tệp phù hợp với một số tiêu chí và tôi muốn chỉ đưa danh sách này vào một lệnh Git để có được ngày cam kết cuối cùng cho mỗi tập tin.Làm thế nào để có được ngày cam kết cuối cùng cho một loạt các tập tin trong Git?
Trả lời
Lệnh sau sẽ rất hữu ích:
git log -1 --format=%cd filename.txt
này sẽ in ngày thay đổi mới nhất cho một tập tin. -1
hiển thị một mục nhập nhật ký (lần gần nhất) và --format=%cd
hiển thị ngày cam kết. Xem tài liệu cho git-log
để biết mô tả đầy đủ về các tùy chọn.
Bạn sẽ có thể dễ dàng mở rộng nhóm này cho một nhóm tệp.
Điều này hữu ích. Có cách nào tốt hơn để đính kèm tên của mỗi tập tin vào ngày hơn một cái gì đó như sau: 'cho x trong $ (một số lệnh); echo $ x $ (git log -1 - format =% cd $ x); done'? – jonderry
Tôi không nghĩ như vậy, vì tất cả các mã định dạng '%' tham chiếu đến * commit * chứ không phải là tệp * riêng lẻ *. 'echo' có thể là cách đơn giản nhất ở đó. –
Giá trị chỉ ra rằng '% ci' xuất ra ngày định dạng ISO (ish); để bạn có thể sắp xếp chúng. Ngoài ra '% ai' sẽ xuất ra ngày tác giả, thay vì ngày bắt đầu. –
Hơi mở rộng câu trả lời của Greg, git log
có thể thực hiện nhiều đường dẫn trong đối số của nó. Sau đó, nó sẽ chỉ hiển thị các cam kết bao gồm các đường dẫn đó. Vì vậy, để có được cam kết mới nhất cho một nhóm các tập tin:
git log -1 --format=%cd -- fileA.txt fileB.txt fileC.txt
Tôi rác khá ở kịch bản vỏ, vì vậy tôi không chắc chắn chính xác làm thế nào để xây dựng lệnh đó thông qua đường ống, nhưng có lẽ đó sẽ là một chủ đề tốt cho một câu hỏi khác.
Vâng, nhưng điều đó trả về cam kết mới nhất trong số tất cả các cam kết của các tệp, thay vì cam kết mới nhất * cho mỗi tệp *. – Cameron
Điều này hoạt động nhưng đáng buồn là không phải bên trong một môi trường TravisCI. Khi TravisCI nhân bản repo, tất cả các ngày tháng đều là ngày và thời gian của bản sao (hôm nay/bây giờ) và không phải ngày và thời gian của những gì có trong repo. Rất bực bội. – MitchellK
Tôi đã đăng sự cố với TravisCI về vấn đề này tại đây nếu có ai khác quan tâm> https://github.com/travis-ci/travis-ci/issues/8539 – MitchellK
Dưới đây là một liner sử dụng find (chia thành nhiều để có thể đọc, nhưng nhờ vào những dấu xồ nguợc dấu, copy-paste nên làm việc):
find <dirs...> -name '<pattern>' <any other predicate to get what you want> \
-exec git log -1 --format="AAA%ai NNN" '{}' \; \
-exec echo '{}' XXX \; \
| tr \\n N | sed -e 's/AAA/\n/g' | sed -e 's/NNNN/ /g' -e 's/XXX.*//g'
Các newline quá phức tạp mangling với tr và sed là chỉ có để lấy ngày và tên tệp trên một dòng và bỏ qua các tệp không được theo dõi. Bạn phải đảm bảo rằng không có tệp nào của bạn chứa các dấu hiệu ngớ ngẩn đó AAA XXX NNNN.
- 1. Rollback để git cam kết cuối cùng
- 2. Làm thế nào để bỏ qua các tập tin hiện có, cam kết trong git?
- 3. Git: Làm thế nào để có được thông tin cam kết của một changeset
- 4. Associate một git trống cam kết với các tập tin
- 5. Làm thế nào để tôi cam kết bí mật trong git với ngày cam kết không có trong quá khứ?
- 6. git: Hiển thị thông điệp cuối cùng cam kết trong cam kết mẫu
- 7. Lấy tập tin mới nhất Ngày cam kết từ SVN
- 8. git push: Đẩy tất cả các cam kết ngoại trừ số cam kết cuối cùng
- 9. Làm thế nào để có được một danh sách các tập tin đóng cửa cuối cùng trong emacs?
- 10. Git tìm hiểu cam kết cuối cùng tôi đã đẩy
- 11. Nhận tin nhắn cuối cùng hoặc sự khác biệt của CVS cuối cùng cam kết
- 12. Làm thế nào để xóa cam kết n cuối cùng trên Github và cục bộ?
- 13. Khôi phục tập tin từ cam kết cũ trong git
- 14. Làm thế nào để quay trở lại cam kết trước đó mà không làm mất cam kết cuối cùng trong Git?
- 15. làm thế nào để làm cho git không thay đổi kết thúc dòng cho một tập tin cụ thể?
- 16. Làm thế nào để thay đổi ngày cam kết ở thượng lưu trong Git?
- 17. Làm thế nào để uncommit trong lanh lợi cho cuối cùng của tôi cam kết (chưa đẩy)
- 18. Làm thế nào để tôi thực hiện một cam kết Git trong quá khứ?
- 19. Làm thế nào để có được ngày cuối cùng của một tháng cụ thể với JodaTime?
- 20. Lấy danh sách các cam kết cùng với thông báo cam kết và băm trong Git
- 21. git add. -> vẫn "không có gì để cam kết" với các tập tin mới
- 22. Cam kết các phần cụ thể của một tập tin trong Git
- 23. Vứt bỏ một loạt các cam kết trong Mercurial
- 24. Tại sao Git tạo một cam kết hợp nhất mà không có thay đổi tập tin?
- 25. Sử dụng git diff trong cùng một tệp giữa cam kết đầu tiên và lần cuối
- 26. Làm cách nào để "mở lại" một cam kết git?
- 27. Mercurial undo cam kết cuối cùng
- 28. Unix: Làm thế nào để xóa các tập tin được liệt kê trong một tập tin
- 29. magit: làm thế nào để diff cùng một tập tin giữa hai cam kết khác nhau trên cùng một chi nhánh?
- 30. Git: khám phá những cam kết bao giờ chạm vào một loạt các dòng
Bạn có bao giờ có thể tạo bí danh git hoặc bất kỳ điều gì có thể loại bỏ ngày cam kết của nhiều tệp không? Tôi có một thư mục cha với các tập tin và thư mục/tập tin, vv Tôi muốn xem thời gian qua bất cứ điều gì trong thư mục đó thay đổi. – Terry