我想比較git倉庫中的兩個文件,並告訴哪一個是早些時候(通過血統,而不是時間戳)引入倉庫。這樣做的天真方式是找到引入文件的單個提交(rev-list HEAD -- <filename> | tail -n 1
),並查詢它們之間是否有提交(rev-list commit1 ^commit2
)。然而,這是緩慢和愚蠢的。那麼平分歷史直到我們找到一棵包含一個文件但不包含另一個文件的樹?哪個文件歷史悠久?
1
A
回答
0
使用diff過濾= A
git log --reverse --format=%H --name-status --diff-filter=A -- file1 file2 | grep ^A | cut -f2
對於任意數量的文件,你會得到所需要的排序在一個遍歷。
0
根據我瞭解你,畢竟這可能是你在找什麼:
git log --topo-order --reverse --oneline --name-only --pretty=format:"%Cgreen%ci %Cblue%cr %Cred%cn %Cgreen%h %Creset" <file1> <file2> | head -n10
--topo階
顯示其所有的孩子之前沒有父母顯示,並避免在多行歷史記錄中混合顯示提交。- 反向
以相反的順序輸出提交。
請參閱:git-log瞭解更多選項和可能的組合。
1
除非在同一個線性分支中引入的文件(即一個在另一個的祖先中)沒有辦法知道。假設你在你的回購中引入了文件A,並且我在我的文件中引入了文件B.如果以後我從你的回購克隆中克隆出來,那麼無法知道哪一個是先出現的。當然,我們可以同步時鐘,但這不屬於git。 git的「時間」唯一的概念是祖先關係,其他人只是沒有可比性。
+0
這個普遍真理與我的問題有什麼關係?我特別說「祖先」:輸出應該是1. file1早於file2,2. file2早於file1,或3.關係未定義。 – artagnon 2013-03-20 20:16:38
相關問題
- 1. SQL只更新歷史最悠久的一個多到一的關聯
- 2. 吐溫悠悠是永久的
- 3. ipython的歷史文件在哪裏
- 4. 關於如何快速瞭解一個具有悠久歷史的項目的建議
- 5. MongoDB有一個shell歷史文件嗎?
- 6. 文件歷史記錄8
- 7. 缺少sqlite3歷史文件
- 8. 檢查文件的歷史
- 9. 刪除文件(歷史)
- 10. Emacs文件編輯歷史
- 11. python cmd模塊中的持久歷史
- 12. 歷史的歷史
- 13. git p4克隆文件歷史包括積分歷史
- 14. Git提交歷史與文件歷史不同步?
- 15. 默認的zsh歷史文件在哪裏?
- 16. 兩個文件具有相同的文件歷史記錄
- 17. 保存混帳文件歷史記錄爲多個文件
- 18. 哪些算法可以根據歷史
- 19. 我的TFS歷史去了哪裏?
- 20. 晃晃悠悠的「其他」分辨率
- 21. VSO git文件歷史中的「簡單歷史記錄(默認)」和「完整歷史記錄」有什麼區別?
- 22. 文件歷史記錄在Windows 8.1
- 23. Eclipse本地文件歷史記錄
- 24. 項目發佈歷史文件
- 25. git - Blob/index文件歷史記錄
- 26. TFS高級文件歷史查看器
- 27. 查找文件歷史記錄
- 28. 時間表和歷史文件postgresql 9.1
- 29. Git:移動歷史中的文件也
- 30. 爲文件創建修訂歷史
添加'--remove-empty'可能會讓它更快:請參閱[爲什麼「git log」緩慢?](https://git.wiki.kernel.org/index.php/Git_FAQ#Why_is_.22git_log_ .3Cfilename.3E.22_slow.3F)(還有其他一些相關信息) –
tcovo
2013-03-19 03:57:53