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

让我们假设两个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/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