将两个或更多的git分支拆分为一个仓库的单独子目录?

24 浏览
0 Comments

将两个或更多的git分支拆分为一个仓库的单独子目录?

这个问题与如何将两个不同仓库的两个分支合并到一个单一仓库中?有些相似。

然而,我想将同一个仓库中的两个分支合并成一个分支,但是放在不同的子目录下。所以,从一个有两个分支的仓库开始:

/appFoo
  -Master分支
  -OtherVersion分支

最终生成一个有一个主分支和两个子目录的仓库:

/appFoo
    /Master子目录
    /OtherVersion子目录

当然,我希望保持历史记录完整,所以如果我查看OtherVersion子目录中文件的日志,我能看到所有对该分支所做的提交。

基本上,最初作为开发分支的东西发展成为另一个客户的定制版本,所以我们不再觉得将其视为主分支的一个分支是有意义的。

谢谢大家!

0
0 Comments

问题的原因:在合并两个或多个git分支时,可能会遇到文件重命名的冲突,导致无法成功合并。

解决方法:可以通过将分支的内容分别放入不同的子目录中来解决冲突,并进行提交。具体步骤如下:

1. 切换到主分支(MasterBranch)并将分支的内容放入目录(MasterSubdirectory)中,然后提交:

git checkout MasterBranch
mkdir MasterSubdirectory
git mv -k * MasterSubdirectory
git commit -a

2. 同样的,切换到另一个分支(OtherVersionBranch)并将分支的内容放入目录(OtherVersionSubdirectory)中,然后提交:

git checkout OtherVersionBranch
mkdir OtherVersionSubdirectory
git mv -k * OtherVersionSubdirectory
git commit -a

3. 将一个分支合并到另一个分支中:

git checkout MasterBranch

git merge OtherVersionBranch

git branch -d OtherVersionBranch

现在你只有一个名为MasterBranch的分支,可以将其与master合并,或者进行其他操作。

另外,如果你不介意重写历史记录,你可以使用rebase替换合并操作,这将产生更清晰的提交顺序,先是一个分支,然后是另一个分支。

请注意在操作之前备份你的代码,因为这个方法只适用于简单的情况。

如果在合并过程中出现了许多"CONFLICT (rename/rename)"冲突,可能是因为git在相同的文件上进行了重命名而不是合并操作。你可以尝试在合并时添加参数"--find-copies-harder"来解决冲突。

如果以上方法仍然无法解决冲突,可能需要等待其他人发布更好的解决方案或者手动解决冲突。

最后,原作者表示已经解决了问题,但仍然希望有更简洁的解决方案。

0