Git子树拆分两个目录

标签 git git-subtree

我一直在关注 this excellent answer将我的 git 存储库的子目录提取到它自己的存储库中,同时保留完整的历史记录。

我的仓库看起来像:

src/
    http/
    math/
tests/
    http/
    math/

我想创建一个只包含 src/mathtests/math 目录的新分支。

如果我运行以下命令:

git subtree split -P src/math -b math

它创建一个分支,其中包含 src/math 目录的内容,但丢弃了 src/math/ 前缀。

如果我对两个目录尝试相同的命令:

git subtree split -P src/math -P tests/math -b math

它只提取了tests/math的内容,忽略了src/math,同时也丢弃了tests/math前缀。

总而言之,我希望我的最终存储库看起来像:

src/
    math/
tests/
    math/

也就是说,保留原始目录结构但丢弃命令行中未明确提及的所有内容。

我该怎么做?

最佳答案

根据您的需要,您可能会使用 git filter-branch

我不完全确定您要实现的目标,但如果您只是想删除两个目录的存储库(在历史记录中?)这可能是您最好的选择。

另见 Rewriting Git History .

$ git filter-branch --tree-filter 'rm -rf tests/http src/http' --prune-empty HEAD

这将查看每个提交并从此提交中删除两个目录。 请注意,这会重写历史记录(即:更改您的提交 sha),如果您与另一个存储库有共同的历史记录,将会引起头痛。

关于Git子树拆分两个目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25574407/

相关文章:

python - AppEngine 推送部署和模块

Git:如何 rebase 到先前的提交

android - 我可以为 Android Studio 中的每个模块设置不同的更改列表吗?

android - Android Studio 中的智能 merge 有什么作用?

git:如何从项目中分离出库?过滤器分支,子树?

git - 我可以使用没有前缀的 Git 子树吗?

git - 如何在 jenkins git 插件中下载一个特定的 gerrit 更改集?

git - 将 git flow 与 git 子树一起使用

Git:有没有办法自动推送子树?

git subtree push --squash 不压缩