2013-02-11 58 views
0

有各3个项目有自己的混帐回购协议:两个松散耦合分叉的Git项目内恢复历史

  • 项目A,项目独立B的
  • 项目B,一个项目独立的A
  • 项目AB,一个项目,使用一些A和B的一些。来源,文件结构等的融合,并进行了一些修改,以允许两者正确混合。

项目A和项目B大多死亡,但在创建AB之后确实收到了一些小补丁,其中一些补丁后来移植到AB。 AB的git repo创建时没有A或B的历史记录。我很容易判断哪个文件或目录来自A,哪些来自B,我知道每个初始文件从哪个提交。

如何还原历史AB初始化之前,假定AB的所有文件都是基于文件从A还是B?

请记住以下几点:

  • 从A文件可以是B类的目录,反之亦然,所以我应该能够处理移动
  • 在某些时候,我倒要变基AB的移植的补丁,使他们从A或B.归因于合并
  • 我想为A或B能够合并AB,虽然只有其中的一个能够做到这一点会没关系,只要我能控制哪一个。
  • 大约有30-50个文件,所以我仍然可以为每个文件重新配置文件,如果我不必这样做,那将是首选。

回答

2

一般而言,您可能想要将A和B设置为根提交的父项。你可以在这里看到如何做到这一点:

https://stackoverflow.com/a/4164767/758345

的Git现在就明白了这些文件的来源以及还处理重命名等,您现在应该能够从A和B合并为AB。

你永远不能合并AB到A或者B,AB作为还包含其他项目。你也许可以用樱桃采摘,但我也怀疑这一点。如果你想从AB的变化被贡献给A和B,你应该看看submodules和git-subtree。

+0

我真正通过合并AB为A或B的意思是通过使AB访问一个维护者或B维护者引入文件B或B文件到。我们的目标是继续与AB合作,但要接触A或B中的“卡住”的人。 – DavidJFelix 2013-02-20 13:57:41

+0

正如我所说的,将AB合并到A或B中*非常有问题,除非A和B在单独的目录中AB。或者,您可以编写一个帮助程序脚本来整理属于A或B的AB部分。但就我所知,git不包含任何此类功能。 – Chronial 2013-02-20 16:04:20