Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Git中的子树与历史一起导出_Git_Import_Export_History - Fatal编程技术网

将Git中的子树与历史一起导出

将Git中的子树与历史一起导出,git,import,export,history,Git,Import,Export,History,我的Git存储库中有一个文件夹,我想把它移到自己的存储库中。是否可以将该文件夹的历史记录与文件夹一起移动 我以前只做了一个git rm-r--cached子文件夹/,然后在子文件夹上做了git init。但是,历史记录不会导入到新存储库中。引用 要重写存储库,使其看起来像foodir/已成为其项目根目录,并放弃所有其他历史记录,请执行以下操作: 因此,例如,您可以将库子目录转换为自己的存储库。请注意--将过滤器分支选项与修订选项分开,以及--all将重写所有分支和标记 对于2021年(或更晚)到

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

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

引用

要重写存储库,使其看起来像foodir/已成为其项目根目录,并放弃所有其他历史记录,请执行以下操作:

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


对于2021年(或更晚)到达这里的其他人,核心git团队并不强烈推荐git过滤器分支

警告 git filter分支有太多的陷阱,可能会对预期的历史重写造成不明显的破坏(并且由于它的性能如此糟糕,您几乎没有时间调查这些问题)。这些安全和性能问题不能向后兼容地解决,因此,不建议使用。请使用其他历史过滤工具,如git filter repo。如果您仍然需要使用git filter branch,请仔细阅读安全(和性能)以了解filter branch的地雷,然后警惕地尽可能避免其中列出的危险

相反,建议使用的工具是可以轻松解决此问题的工具

git filter repo--path子文件夹/#只将repo过滤到子目录
git mv子文件夹/*。#将子目录的内容移动到根目录
git提交-m“从主回购中筛选”

只需确保在原始存储库的克隆上运行此操作,因为它会清除回购的其余部分。太棒了!如果没有一个有效的例子,我无法理解这个选项。谢谢另外,感谢@bobDevil的提醒。我把我所有的更改都推到了我的遥控器上/在尝试这个之前/所以如果它删除了我的回购协议,我会很安全;但这肯定是出乎意料的。当您只保留一个目录的历史记录时,您可能希望生成的克隆更小,但还需要做更多的工作。在执行筛选器分支后,收缩它的最简单方法是再次克隆。有关详细信息,请参阅git filter branch(1)手册页(“缩小存储库的检查表”)。@AdamMonsen:您可以执行
git gc
而不是克隆回购。类似于或重复:的可能重复
git filter-branch --subdirectory-filter foodir -- --all