Git 我可以从子目录进行子树合并吗?
让我们假设两个git存储库中有一些文件:Git 我可以从子目录进行子树合并吗?,git,git-subtree,Git,Git Subtree,让我们假设两个git存储库中有一些文件: ProjectA + a + b ProjectB + foo/x + foo/y + bar/z 现在我想将ProjectB中的目录foo包含到ProjectA中 据我所知,当我添加git子树时,前缀是它在接收存储库中应该具有的路径,所以当我添加时 git subtree add --prefix=project_b --squash URL_of_ProjectB 我会以 ProjectA + a + b + project_b + foo
ProjectA
+ a
+ b
ProjectB
+ foo/x
+ foo/y
+ bar/z
现在我想将ProjectB中的目录foo
包含到ProjectA中
据我所知,当我添加git子树时,前缀
是它在接收存储库中应该具有的路径,所以当我添加时
git subtree add --prefix=project_b --squash URL_of_ProjectB
我会以
ProjectA
+ a
+ b
+ project_b
+ foo/x
+ foo/y
+ bar/z
我是否可以指定只获取foo
以获得此布局
ProjectA
+ a
+ b
+ project_b
+ x
+ y
我认为这不能用git子树来实现。也许您需要的是git过滤器分支
:
git remote add b <URL_TO_B>
git fetch b
git checkout -b b_master b/master
或者使用git子树拆分
git subtree split -P foo --branch foo
并将其添加为子树
git subtree add --prefix=project_b --squash b_master or foo
这是否改变了将ProjectB中的进一步变更合并为ProjectA的过程?我认为我的场景正是git子树的用途,但如果不是,那么它能实现什么呢?也许我可以更改我的文件布局以更好地适应它。是的,每次您要将ProjectB中的更改合并到ProjectA时,都必须重新执行筛选分支步骤。git子树的手册页
解释了git split
命令,该命令类似于我给出的filter branch
命令。但是如果您可以更改布局,那么最好将foo
的内容提取到一个单独的存储库中,并将其作为子树添加到两个项目中。也许这更好,因为b
是某种库?这就是问题所在,其实不是。如果是的话,我会把它变成一个子模块。这是两个项目之间共享的一些代码。。。国家列表、一些模板等。我选择在原始存储库中使用git subtree split
拆分子树,推送新分支,然后使用git subtree add
将该分支提取到接收分支中。谢谢。是否也可以将提取目录“foo”上的更改从ProjectA合并回ProjectB?
git subtree add --prefix=project_b --squash b_master or foo