2017-03-17 44 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

相关问题