将两个或多个git分支拆分为一个repo的独立子目录?

将两个或多个git分支拆分为一个repo的独立子目录?,git,Git,这个问题有点类似于 但是,我想将同一存储库中的两个分支合并到一个分支中,但要在单独的子目录中。因此,从一个有两个分支的回购开始: /appFoo -MasterBranch -OtherVersionBranch 最终的回购协议有一个分支机构(主分支机构)和两个子目录: /appFoo /MasterSubdirectory /OtherVersionSubdirectory 当然,我希望保持历史记录的完整性,因此如果我查看OtherVersionSubdirecto

这个问题有点类似于

但是,我想将同一存储库中的两个分支合并到一个分支中,但要在单独的子目录中。因此,从一个有两个分支的回购开始:

/appFoo
  -MasterBranch
  -OtherVersionBranch
最终的回购协议有一个分支机构(主分支机构)和两个子目录:

/appFoo
    /MasterSubdirectory
    /OtherVersionSubdirectory
当然,我希望保持历史记录的完整性,因此如果我查看OtherVersionSubdirectory中的文件日志,我会看到对该分支所做的所有提交

基本上,最初的开发分支演变成了另一个客户的定制版本,因此我们认为将其视为master的分支不再有意义


谢谢大家

切换到分支
MasterBranch
并将分支的内容放入目录
MasterSubdirectory
,提交:

git checkout MasterBranch
mkdir MasterSubdirectory
git mv -k * MasterSubdirectory
git commit -a
这样,您的分支只剩下一个dir

在OtherVersionBranch中进行类似操作:

git checkout OtherVersionBranch
mkdir OtherVersionSubdirectory
git mv -k * OtherVersionSubdirectory
git commit -a
将一个分支合并到另一个分支

git checkout MasterBranch
git merge OtherVersionBranch
git branch -d OtherVersionBranch
现在您有了一个分支
MasterBranch
。您可以将其与
master
合并,也可以对其执行任何操作

或者,如果您不介意重写历史记录,您可能希望用rebase替换merge。这将产生一个更清晰的提交顺序——首先是一个分支,然后是另一个分支


一定要在副本上试一试。它对我很有效,但我的情况很简单。

为什么将这样的版本保留为分支不好?这实际上就是分支的用途,至少在git中是这样,因为它们非常便宜。这样做将代表项目是如何演变和分叉的。事实上,你甚至可以将这个分支机构拆分成一个新的回购协议。问题是,我们已经厌倦了在不同的分支机构之间合并变更。有很多共享代码,所以我们希望将其移到它自己的子目录中,并将自定义代码保留在原来的位置。当我进行合并时,会遇到大量“冲突(重命名/重命名)”冲突。它似乎位于分支之间相同的所有文件上。git似乎想对这些文件进行重命名,而不是合并。在这种情况下,“是的,我真的想要这个”的转换是什么?这很奇怪,但也许你的回购协议中有一些我没有考虑到的东西。我尝试了一个场景,在master中有两个文件,然后创建了新的分支,修改了两个,然后在master上修改了两个,但不同,所以分支完全分开了,然后我按照我在答案中写的那样做了,它就行了。你确定两个分支在合并之前只有一个不同名称的目录吗?嗯,目录并没有那么简单,但git抱怨文件是相同的,而不是不同的。似乎你必须等待有人发布更好的解决方案或解决冲突:/Ok,我想我已经成功了。在上次合并之后,在它允许我提交之前,我必须对以前存在的所有文件执行“git-rm”,即使它们实际上已经不存在了。现在,如果我想获得任何一个版本的文件的完整历史记录,我必须通过“git log”更难找到副本,但我认为这是我所能期望的。非常感谢你花这么多时间在这上面。