繁体   English   中英

使用历史导出 Git 中的子树

[英]Export subtree in Git with history

我的 Git 存储库中有一个文件夹,我想将其移到自己的存储库中。 是否可以随文件夹移动该文件夹的历史记录?

我以前一直在做一个git rm -r --cached subfolder/然后在子文件夹上执行git init 但是,历史不会导入到新存储库中。

引用git-filter-branch(1)一个例子

重写存储库以使其看起来好像 foodir/ 一直是它的项目根目录,并丢弃所有其他历史记录:

git filter-branch --subdirectory-filter foodir -- --all

例如,您可以将库子目录转换为它自己的存储库。 请注意将过滤器分支选项与修订选项分开的 --,以及用于重写所有分支和标签的 --all。

对于 2021 年(或之后)来到这里的其他人,核心 git 团队不强烈推荐 git filter-branch。

警告 git filter-branch 有很多陷阱,可能会对预期的历史重写产生不明显的破坏(并且由于它的性能如此糟糕,因此您几乎没有时间调查这些问题)。 这些安全和性能问题无法向后兼容修复,因此不推荐使用它。 请使用替代的历史过滤工具,例如 git filter-repo。 如果您仍然需要使用 git filter-branch,请仔细阅读 SAFETY (and PERFORMANCE) 以了解 filter-branch 的地雷,然后警惕地尽可能多地避免其中列出的危害。

相反,推荐的工具是git-filter-repo ,它可以轻松解决此问题

git filter-repo --path subfolder/   # Filter the repo to just the sub-dir
git mv subfolder/* .                # Move the contents of the sub-dir to the root
git commit -m "Filtered from main repo"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM