2017-03-17 46 views
0

我正在將項目從TFS轉換爲git,並且我想保留所有歷史記錄。如何在另一個頂端添加git倉庫

問題在於一年前TFS項目在TFS中移動。 使用git-tfs我可以將兩個位置轉換爲git,但現在我有兩個git存儲庫:A和B.

我已經設法將A和B都放入與不同分支相同的存儲庫中。是否有可能將B中的第一次提交的父代更改爲A中的最後提交?

Branch A: a -> b -> c 
Branch B: d -> e -> f 

我想有

a -> b -> c -> d' -> e' -> f' 

解決方案:

git filter-branch --parent-filter 'sed "s/^\$/-p <last-commit-in-A>/"' HEAD_OF_B 

回答

1

當然,設置一個graft,那正是這麼做的。如果你對結果感到滿意,你可以做一個filter-branch永久。或者您可以使用filter-branch立即與--parent-filter

0

我能想到的兩種解決方案:

  1. 創建一個父庫和添加庫A和B作爲子模塊。通過閱讀git submodule的文檔,您可以瞭解更多信息。

  2. 添加庫B作爲一個遙控器來存儲庫:

    $ git remote add repoB <directory where repo B is located> 
    

    現在,您可以獲取,拉,合併,以及回購乙底墊,例如:

    $ git checkout master 
    $ git pull repoB master 
    

    (如果它更有意義,你可以圍繞這樣做的其他方式:添加一個回購作爲一個遙控器來回購B的概念同樣適用)

+0

這確實不起作用,因爲git存儲庫不共享歷史記錄。 A的最後一次提交和B的第一次提交具有完全相同的內容。但是他們的SHA1哈希值不一樣。這兩個回購已經從TFS轉換而來。 – sighol

+0

@sighol你是什麼意思的「不工作」?我以'git merge'爲例。也許'git rebase'更適合你的情況。 –

+0

我不認爲'git merge'或'git rebase'將會起作用,因爲這兩個分支有不相關的提交。分支A:a - > b - > c 分支B:d - > e - > f 這兩個早午餐完全不相關的歷史。我想要這個歷史 a - > b - > c - > d' - > e' - > f' 我不能使用rebase,因爲rebase會移除merge commit。 – sighol

相關問題