3
A
回答
2
很容易判斷文件foo
的內容將出現在回購某處的的md5sum:
file=foo # or argument to script, etc
sha1=$(git hash-object -t blob $file)
repotype=$(git cat-file -t $sha1 2>/dev/null) || {
echo "file \"$file\" is not in the repo"
exit 1
}
[ $repotype = blob ] || {
echo "uh oh: file \"$file\" matches non-file ($repotype) object"
exit 1
}
然而,僅僅因爲foo
出現在回購作爲一個blob,並不意味着它出現在名稱bar
(或者根本不可能,它可能是git add
ed,但從未在提交下籤入)。所以現在看每一個承諾,你的目標路徑提取一滴-ID,跳過承諾,如果它不是在那裏(合理的):
target_path=bar
git rev-list --branches | # or --all, or HEAD, or (etc)
while read id; do
file_id=$(git rev-parse -q --verify $id:$target_path) || continue
[ $file_id = $sha1 ] || continue
echo "found \"$file\" as \"$target_path\" in $id"
# do more here if you like, e.g., git show $id
done
如果你想找到它下的任何名稱,而比某些特定的明確名稱,您可以每個承諾找到所有blob
s並檢查其ID。
(注:除了零碎的未經檢驗的,並且偶爾位可能已被重新輸入或沿途改變,當心拼寫錯誤或愚蠢的錯誤)
0
使用的md5sum
,git log
和grep
組合將工作:
for SHA in `git log --pretty=format:"%h" bar`; do
git show $SHA:bar | md5sum
done | grep `md5sum foo| cut -d' ' -f1`
上面的命令git log --pretty=format:"%h" bar
獲取列表的所有承諾爲bar
文件,然後我們做對他們中的每一個(git show
的md5sum展現該提交中的文件)。最後,我們用grep foo
文件
相關問題
- 1. 從Git歷史記錄中刪除具有歷史記錄的特定文件
- 2. git rm是否刪除文件的所有歷史記錄?
- 3. git - Blob/index文件歷史記錄
- 4. 兩個文件具有相同的文件歷史記錄
- 5. 如何更改git歷史記錄中的文件路徑?
- 6. 文件歷史記錄8
- 7. 如何使用git log來標記文件歷史記錄?
- 8. 如何在git中恢復文件歷史記錄
- 9. 如何保護包含git歷史記錄的文件夾
- 10. Git提交歷史與文件歷史不同步?
- 11. VSO git文件歷史中的「簡單歷史記錄(默認)」和「完整歷史記錄」有什麼區別?
- 12. Git /如何檢索簡單的「移動文件」後的文件歷史記錄
- 13. git:如何從blob ID查找文件歷史記錄
- 14. 如何讓git不能跟蹤大文件歷史記錄?
- 15. 如何在JFileChooser中添加選定的文件歷史記錄
- 16. Git刪除文件歷史記錄中的一步
- 17. 從git歷史記錄中刪除已刪除的文件
- 18. 在git中恢復已刪除的歷史記錄文件
- 19. Git:從歷史記錄中刪除替換文件的提交
- 20. 從git歷史記錄中刪除文件的某些內容
- 21. Borland StarTeam 2008 - 如何恢復文件+文件歷史記錄
- 22. TFS刪除文件的歷史記錄
- 23. 非java文件的Eclipse歷史記錄
- 24. Git/Bitbucket - 從整個歷史記錄中刪除文件/提交
- 25. Git從歷史記錄中刪除大文件
- 26. 從git歷史記錄中刪除文件不起作用
- 27. 合併後文件歷史記錄中缺少git提交
- 28. 從Git中選擇單個文件歷史記錄?
- 29. 文件不完整的歷史記錄(git-svn)
- 30. 帶歷史記錄的Git文件複製
美麗,制定正確的開箱。 – Patrick