我可以从子目录中进行子树合并吗?

And*_*eKR 6 git git-subtree

我们假设有两个git存储库,其中包含一些文件:

ProjectA
+ a
+ b

ProjectB
+ foo/x
+ foo/y
+ bar/z
Run Code Online (Sandbox Code Playgroud)

现在,我想包括目录foo项目B项目A.

至于我,当我明白git subtree addprefix是,它应该在接收库的路径,所以当我做

git subtree add --prefix=project_b --squash URL_of_ProjectB
Run Code Online (Sandbox Code Playgroud)

我最终会

ProjectA
+ a
+ b
+ project_b
  + foo/x
  + foo/y
  + bar/z
Run Code Online (Sandbox Code Playgroud)

我可以以某种方式指定我只想foo获取此布局吗?

ProjectA
+ a
+ b
+ project_b
  + x
  + y
Run Code Online (Sandbox Code Playgroud)

gre*_*gor 5

我认为这不可能实现git subtree.也许git filter-branch就是你需要的:

git remote add b <URL_TO_B>
git fetch b
git checkout -b b_master b/master
Run Code Online (Sandbox Code Playgroud)

重写b仅包含的历史记录foo:

git filter-branch --prune-empty --subdirectory-filter foo b_master
Run Code Online (Sandbox Code Playgroud)

或使用 git subtree split

git subtree split -P foo --branch foo
Run Code Online (Sandbox Code Playgroud)

并将其添加为子树

git subtree add --prefix=project_b --squash b_master or foo
Run Code Online (Sandbox Code Playgroud)

  • 我选择在原始存储库中使用`git subtree split`拆分子树,推送新的分支,然后使用`git subtree add`将该分支提取到接收的分支中.谢谢. (2认同)