将一个Git repo移动到另一个带分支的子文件夹中

时间:2015-02-18 19:54:21

标签: git merge

我有一个Git repo Old,我希望将其转移到现有Git仓库sub的子文件夹New中。我在master内有两个分支featureOld,我想转移过来; Old\master应该合并到New\masterNew中应该有一个名为old-feature的新分支。

我并不过分担心干净的历史;我目前的流程只是在进行迁移之前在git mv中执行Old,这对我来说没问题。如果可能的话,我更愿意避免重写历史。

我目前的迁移步骤如下(在New repo中):

  • git remote add -f old ...
  • old-feature创建新的master分支。
  • feature创建本地old/feature分支。
  • 合并分支feature - > old-feature
  • 合并分支old/master - > master
  • 推两个分支。

虽然这有效,但我发现稍后如果我从old-feature合并到master,Git就不会理解历史(我的意思是我的混乱历史)并将每个文件视为合并冲突。如何进行正确的迁移以维护分支关系?

1 个答案:

答案 0 :(得分:0)

虽然这属于长评而不是答案,但我想向您展示我通过两个单独的回购跟踪您的流程所取得的结果,以便我可以问下面的示例日志是如何不令人满意的。 (注意:我只有一个合并冲突,这是两个repos中的README.md文件。)

PowerShell的

> cd Old
> git commit --allow-empty -m "A commit from Old"
> dir -Exclude sub | % { Move-Item $_ sub }
> git add -A; git commit -m "Move all to sub"
> cd ..\New
> git remote add old -f <full-path-to-Old>
> git checkout master
> git checkout -b old-feature
> git branch feature old/feature
> git merge feature
> git log --oneline --graph --all --decorate -20

记录结果

*   4b636e7 (HEAD, master) Merge remote-tracking branch 'old/master'
|\
| * 4aa5741 (old/master) Move all to sub
| * 158c921 Commit from old/master.
| * c258979 Commit from old/master.
| * b00b001 Commit from old/master.
| * b0b582b Commit from old/master.
| * b6487e1 Commit from old/master.
| * 15b676a Commit from old/master.
| * 9db62a7 Commit from old/master.
| * 1ff5856 Commit from old/master.
| | *   f8475cb (old-feature) Merge
| | |\
| |/ /
|/| |
| | * 54e0f30 (old/feature, feature) Commit from old/feature.
| | * 999e6b5 Commit from old/feature.
* | | f0dd795 (origin/master) Commit from new/master.

我不确定你想要&#34;维持分支关系时的意思。&#34;您想对我的示例中所示的历史记录进行哪些更改?