簡體   English   中英

Git 單個文件歷史丟失與 git 子樹

[英]Git individual file history lost with git subtree

我將 2 個 git 存儲庫(舊 1 和舊 2)合並到 1 個(新 1)中。 我的要求是合並所有分支並保留 git 提交歷史。 我可以實現的第一個,但我正在努力處理提交歷史。

這是我執行的將 old1 存儲庫合並到 new1 的子文件夾中的命令: git subtree add -P old1 https://github.com/example/old1.git master

git log --graph --oneline --decorate --all

*   ad4fcb6 (HEAD -> master, origin/master, origin/HEAD) Add 'komed-connector/' from commit '50b42475113c295c66c4050b3b0f119a6ebff62b'
|\  
| * 50b4247 Updated komed-shared
| *   1a5435a Merge branch 'master' into openshift_build
| |\  
| | *   8aa90aa Merge branch 'r/3.4'
| | |\  
| | | * a6cea77 updated shared
| | * | a40c782 Updated komed-shared
...

到目前為止一切順利:保留 git 提交歷史記錄。 但是,如果我正在檢查新子文件夾中單個文件的 git 提交,它不會顯示所有提交: 在此處輸入圖像描述

如何將 2 個存儲庫合並為 1 個並保留單個文件 git 提交歷史記錄? 因此,當運行gitk old1/Dockerfile git 時,會向我顯示舊存儲庫上發生的所有提交。

我的理解是Git沒有“單個文件提交歷史”的概念。 跟蹤 old1/Dockerfile 與某個不同位置的其他文件相關的事實留給可視化和命令行工具中的啟發式方法(或缺乏)。 更多關於此問題的討論可以在這個問題中找到: git,在保留歷史記錄的同時移動/重命名文件的可靠方法

從實際的角度來看,我會嘗試重寫“舊”回購歷史,就好像它完全發生在oldreporoot/old1文件夾中一樣。 然后這個 repo 可以干凈地合並到新的 repo 中,並且您的可視化/命令行工具應該相應地運行,因為文件不會被重命名/移動。

git filter-branch --tree-filter應該有助於完成這項工作,如https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History中所述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM