我通過使用git subtree add而不使用壓扁選項,將一棵樹合併到我的存儲庫中。一個git日誌顯示提交已成功添加到存儲庫。但是,如果我執行git log --follow filename
,則歷史記錄停止在合併中,並且不顯示以前的提交。我嘗試使用-M
而不是--follow
,這也不起作用。如何從合併之前獲取特定文件或文件的提交日誌?git-subtree without squash:查看日誌
回答
實際上,git log --follow
應該與子樹工作合流,但它被稱爲是hackish的很長一段時間[1-3]。
一個人可以堅持子樹合併和休息,該策略是有效的跟蹤多個歷史,並耐心等待git log --follow
將改善不可避免的事件。這實際上可能是一個可行的決定,因爲目前git log --follow
可以在非常有用的案例中看到一些歷史。假設您將文件從頂級回購庫移至子回購庫,那麼它可以跟蹤整個移動。當你想追蹤特定於子回購的歷史記錄時,你必須有一個單獨的副本或檢查一個子回購分支。
替代方案和解決辦法
你可以得到日誌像這樣的文件[1]:
git log -- '*filename' # from the toplevel
此圖,各自提交感動他的名字 與filename
結尾的文件。它不會遵循實際的重命名,並且如果您有多個具有相同基本名稱[1]的文件,則可能會顯示錯誤 肯定。
您還可以使用不同策略合併存儲庫。 參考文獻[4]顯示了一種方法,它與常規子樹合併的情況非常接近,但具有可跟蹤的歷史記錄。基本上,你:
- 作爲常規的遠程,沒有git子樹或讀取樹添加,提取和合並每個子存儲庫到頂級存儲庫。起初,這會將你的根目錄視爲是他們的目標,所以這是在項目開始的時候完成的。
git mv
子回購文件到不同的文件夾
然後:
- 上游的變化可以被取出並且通常合併,但與
-Xsubtree
標誌與git合併。 - 其他情況應該是相似的。我已經測試推動上游,它的工作原理,見[4]中的評論。
參考
[1]從git的郵件列表 http://git.661346.n2.nabble.com/Bug-Files-are-losing-history-after-subtree-merge-td7597197.html
[2]從git的郵件列表 http://git.661346.n2.nabble.com/gsoc-Better-git-log-follow-support-td6188083.html#a6188352
[3] git log --follow
一直在代碼的谷歌暑期 https://git.wiki.kernel.org/index.php/SoC2011Ideas#Better_git_log_--follow_support
由git subtree merge
或git subtree add
創建的提交對來自子樹的文件進行「添加」,而不是「移動」。這意味着他們的歷史不能像其他合併或移動一樣被追蹤。
想要的文件的歷史記錄仍然可以通過在合併之前直接查看子樹來顯示。如果您的工作空間是git subtree
創建的合併提交,那麼它的第二個父代(HEAD^2
)將是原始子樹的最後一個提交。從這裏你可以看到原來的子樹的內容:
# Display the contents of the original subtree
git ls-tree HEAD^2
從這個承諾,你可以跟蹤你感興趣的文件的變化。請注意,文件的路徑在工作區中的子樹內會有所不同。您將需要刪除給git subtree
的--prefix
,以便爲您的文件創建正確的路徑。
git log HEAD^2 --follow -- path-in-subtree/file
謝謝。由於這個問題,我們最終沒有使用子樹合併 - 如果我們使用了兩個單獨的存儲庫,其他人就更容易理解發生了什麼。子樹合併可以被*非高級git用戶視爲單個存儲庫,但這樣的小差異可能會讓人絆倒。所以我沒有測試你的答案,但絕對值得讚賞。 –
請注意,git filter-tree可以成爲你這類東西的朋友。 –
- 1. 查看git日誌
- 2. 查看mysql日誌django
- 3. 如何查看Java日誌?
- 4. Otros日誌查看器
- 5. 查看日誌同時
- 6. 查看黑莓日誌
- 7. 查看流PipelineDB像日誌
- 8. SharePoint Online日誌查看器
- 9. 查看Oracle日誌文件
- 10. Umbraco查看日誌文件
- 11. 查看Unix日誌文件
- 12. Python日誌查看器GUI
- 13. php停止用戶查看日誌
- 14. 如何查看三星智能電視日誌查看器中的日誌
- 15. 查看較早的查詢日誌 - MySQL
- 16. 是否有vnext生成日誌的日誌查看器?
- 17. 基於數據庫日誌的日誌查看器
- 18. Git的合併與--squash同時保持每個日誌提交
- 19. HTML中的日誌文件查看器
- 20. vim-go:如何查看日誌:GoTestFunc -v?
- 21. 增量查看SVN日誌歷史?
- 22. 如何在parse-server上查看日誌?
- 23. 如何在Android中查看Gstreamer日誌?
- 24. 查看tomcat日誌天青雲服務
- 25. 紅寶石有日誌查看器嗎?
- 26. 融合日誌查看器的替代?
- 27. 如何查看天青診斷日誌
- 28. 同步查看多個日誌文件
- 29. 排序java日誌查看器
- 30. 如何查看snort日誌文件
我相信#4應該是https://saintgimp.org/2013/01/22/merging-two-git-repositories-into-one-repository-without-losing-file-history/ –
@BryanLarsen謝謝 – rfabbri
For #4,'git log --follow'目前只適用於文件,不適用於文件夾。在子repo文件夾中的'git log --follow .'不會返回sub-repo提交,'gitk --follow .'(git 2.10.1) – rfabbri