我们假设有两个git存储库,其中包含一些文件:
ProjectA
+ a
+ b
ProjectB
+ foo/x
+ foo/y
+ bar/z
Run Code Online (Sandbox Code Playgroud)
现在,我想包括目录foo从项目B为项目A.
至于我,当我明白git subtree add的prefix是,它应该在接收库的路径,所以当我做
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)
我认为这不可能实现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)