2013-08-16 174 views
4

每个人都知道不同的东西通过“合并git仓库”,所以这里是我的情况。我们有一个TFS仓库,我们已经在一个时间点检查了资源并做了一个初始的git commit。然后我们在git中进行了正常的开发(分支,合并等)。问题是,在新的存储库中,我们没有在git仓库中存在历史记录,我们希望解决这个问题。因此,我已将整个TFS存储库转换为git存储库,现在我需要将转换后的TFS存储库与当前的git存储库合并。添加历史的Git仓库或合并的git仓库

如从上面的描述中的信息库是独立的从git的观点来看是显而易见的,但从它们具有一个逻辑点提交的共同(提交,成为初始提交到当前git仓库)。

如何合并,而不会丢失任何他们的历史的回购?我可以将转换后的TFS回购作为基础,然后樱桃从当前回购的主数据中选择更改,但不会导入当前回购中创建的所有分支。

回答

2

编辑:我以前的答案不会导致没事找事。 git rebase不是为了做到这一点。 然而,类似的事情已经发生在计算器:Merging two git repositories to obtain linear history

你可以用这个方法尝试:

git init combined 
cd combined 
git remote add old url:/to/old 
git remote add new url:/to/new 
git remote update 

你将有一个新的回购协议,与双方回购引用。那么

git reset --hard old/master 

这将使主分支指向旧回购的主分支。 现在你可以挑樱桃所有提交的新回购主分支

git cherry-pick <sha-1 of first commit on new repo>..new/master 

我们是我们开始:主分支是好的,但如何在新的回购其他部门? 好了,你不需要你的老回购了,所以

git remote rm old 

话,说你有一个在你的新库命名为“BRANCH1”分支。

git checkout branch1 
git rebase master 

这应该改变BRANCH1的历史,使其从主启动(组合的主服务器,包含从进口回购历史)和重订基期应该没有冲突发生。 检查历史与gitk一致的,那么你可以强制推送与

git push -f new master 
git push -f new branch1 

你必须要相信,历史是迫使推之前确定,因为这将改变上游历史(保持新老回购的备份如果需要恢复)

+0

你所说的“开放分支”意思?以后的重组会不会导致所有这些不同分支的所有提交都堆积在一个分支上(老主席;假设没有冲突)? –

+0

否,branch newrepo/master将重新从oldmaster开始,然后是newrepo/branch1等。这假设在旧回购中只有一个分支;通过“开放式分支”,我的意思是所有不同于主人的分支,你想在你的git仓库中进行重组。最终的结果应该是,你的新git仓库中的每个分支都预先安装了oldmaster的内容。最终,在每次重组之前,您需要切换到您正在重组的分支。(git checkout newrepo/branch1; git rebase oldmaster) – p91paul

+0

newrepo中的所有分支都来自最初导入到git中的一个提交,所以我假设我只有一个“开放分支”,即使后来在许多其他分支上创建这个起点,对吗?但是我的oldrepo在过去的稳定版本中包含了一些分支,这是如何改变这种情况的? –