Your approach có thể thất bại để làm việc trong trường hợp chênh lệch không đáng kể (ví dụ phong cách dòng kết thúc, hoặc chênh lệch do để làm sạch bộ lọc/smudge) giữa các phiên bản địa phương và kho của tập tin.
Tập lệnh sau hoạt động qua git diff
thay vì dựa vào băm. Nó chấp nhận các tùy chọn khác sau tên tệp.
ví dụ sử dụng:
# list all commits that introduce the file README.md in its local state
list_introducing_commits README.md
# list all commits that introduce the file README.md in its local state
# ignoring any difference in whitespace
list_introducing_commits README.md -w
list_introducing_commits (không thể tìm thấy một tên tốt hơn):
#!/bin/bash
if [ $# -eq 0 ]
then
echo "Usage: $(basename $0) path/to/file [<diff-options>]"
exit 1
fi
file="$1"
shift 1
for rev in $(git log --pretty=%H -- "$file")
do
if git diff --exit-code [email protected] $rev -- $file &> /dev/null
then
echo $rev
fi
done
@ Vì lý do tôi hỏi là (với git) tôi luôn nghi ngờ có một số lệnh như "git ls-tree --do-something-magic thực hiện chính xác những gì tôi muốn. Giống như khi tôi phát hiện" git hash- đối tượng "phút sau khi viết một máy tính git sha-1 tiện dụng bằng Python! – Xevious
Ví dụ sẽ là khi ai đó gửi tệp cấu hình (được truy xuất từ phần cứng) lên các tầng hỗ trợ cho đến khi nó được gửi cho một bài đăng hoặc chẩn đoán. Trong những ngày quay lại, chúng tôi đã sử dụng mở rộng từ khóa RCS (và cuối cùng là CVS) cho mục đích này. Tôi khá chắc chắn rằng chúng ta có thể sử dụng commit và checkout hooks để thêm mở rộng từ khóa giả, nhưng nó là một kludge mà tôi – Xevious
Liên kết gợi ý và rõ ràng từ nhận xét thứ 2 của bạn, rằng bạn đang nói về một tệp không phải là một phần của cây đang hoạt động của bạn - nhưng e câu hỏi chính nó không nói rằng. Có vẻ như bạn đang yêu cầu 'git log -1 - $ filename' (có thể với một số nhầm lẫn về ý nghĩa của" thuộc về "). Bạn có thể rephrase nó một chút? – trentcl