3 回答

TA貢獻1831條經驗 獲得超10個贊
如果您想保留第二個存儲庫的確切提交歷史記錄,因此也保留了將來輕松合并上游更改的功能,那么這就是您想要的方法。它導致子樹的未修改歷史記錄被導入到您的倉庫中,加上一個合并提交將合并的存儲庫移動到子目錄。
git remote add XXX_remote <path-or-url-to-XXX-repo>
git fetch XXX_remote
git merge -s ours --no-commit --allow-unrelated-histories XXX_remote/master
git read-tree --prefix=ZZZ/ -u XXX_remote/master
git commit -m "Imported XXX as a subtree."
您可以跟蹤上游更改,如下所示:
git pull -s subtree XXX_remote master
Git在進行合并之前會根據其自身的位置計算出來,因此您無需在后續合并中指定前綴。
2.9之前的Git版本:您不需要將--allow-unrelated-histories選項傳遞給git merge。
使用read-tree和跳過該merge -s ours步驟的另一個答案中的方法實際上與使用cp復制文件并提交結果沒有什么不同。

TA貢獻1808條經驗 獲得超4個贊
git-subtree
是一個腳本,專門用于將多個存儲庫合并為一個同時保留歷史記錄(和/或拆分子樹歷史,盡管這似乎與此問題無關)的用例。它自1.7.11發布以來作為git樹的一部分進行分發。
要將<repo>
版本的存儲庫合并<rev>
為子目錄<prefix>
,請使用git subtree add
以下命令:
git subtree add -P <prefix> <repo> <rev>
git-subtree 以更加用戶友好的方式實現子樹合并策略。
對于您的情況,在存儲庫YYY中,您將運行:
git subtree add -P ZZZ /path/to/XXX.git master
- 3 回答
- 0 關注
- 850 瀏覽
添加回答
舉報