如何Git合并一个只包含trunk的子文件夹的分支?

Jes*_*sen 0 git merge git-svn

我目前正在使用svn进行项目(服务器版本为1.4,这意味着没有可用的现代合并工具).

我想合并一个分支,并在其中进行了数周的工作.问题是,在创建分支时,它仅作为子文件夹的副本.

Svn项目结构:

/trunk/folder1
              /file1
              /file2
       folder2
       folder3
       ...
Run Code Online (Sandbox Code Playgroud)

现在我正在努力将一个分支合并回主干.

现在的问题是,创建分支的人只复制/ trunk/folder1而不是整个主干.这给git-svn带来了问题,因为它认为我在文件夹中创建了一堆文件.

 git co master
 git merge branch1
 ...
 create mode 100644 trunk/file1
 create mode 100644 trunk/file2
Run Code Online (Sandbox Code Playgroud)

(假设文件最初在/trunk/folder1/file1)

原因是我没有使用svn,因为太多的conflickts.(svn merge需要服务器1.5+和我们只有1.4,svnmerge.py只能同时合并小块,并要求精神负担过的很多...我用半天时间打通只有一半)

使用git merge似乎很有希望,但首先我需要告诉git使用我的主分支的子文件夹作为合并目标.怎么做的?

Jör*_*tag 5

subtree合并策略用于该用途的情况下创建的.它在远程分支中查找与本地分支中的子目录中的文件匹配的文件,如果它确实找到它们,则在调用"正常" recursive合并策略之前,它会重写所有路径以使两个目录结构匹配.

所以,试试吧

git merge -s subtree branch1
Run Code Online (Sandbox Code Playgroud)