[英]git filter-branch with --subdirectory-filter removes all files
我想对标准存储库进行拆分。 原始存储库必须具有以下结构:
root
|-AAA
|-BBB
|-BBB1
|-BBB2
|-CCC
我尝试使用以下命令将目录BBB1及其所有内容提取到单个存储库中
git filter-branch --subdirectory-filter BBB/BBB1 -- --all
这导致git重写了一堆提交并以git的最终声明结束
Ref 'refs/heads/master' was rewritten
所以这对我来说似乎完全可以。 但是当git完成后查看根目录时,存储库不再包含任何源文件,而仅包含root的.git文件夹。 使用SourceTree浏览该存储库,我可以在日志中看到(可能)正确的提交,这些提交只会影响BBB1 , 但是每个提交不再引用任何文件,因为它们已经全部消失了!
我究竟做错了什么? 为什么所有文件都消失了,甚至包括我实际上过滤过的文件?
提前致谢!
西蒙
确保即使在Windows计算机上也使用Unix样式的路径分隔符( /
)。
这将导致具有正确过滤的历史记录( \\
)的空存储库:
git filter-branch --subdirectory-filter BBB\\BBB1 -- --all
这将导致您的子目录被拉到存储库的根目录和正确过滤的历史记录( /
):
git filter-branch --subdirectory-filter BBB/BBB1 -- --all
由于在Windows命令行中使用/
目录分隔时,您往往会失去自动完成的能力,因此创建路径然后将其更改为Unix样式的分隔可能更容易。
我知道原始问题显示/
分隔符,但是如果您在子目录参数中传递\\
分隔符,则会看到描述的最终结果完全相同,对此我持怀疑态度。 在Windows计算机上切换到Unix风格的/
分隔符后,它就可以完美运行。
我遇到了完全相同的问题,无法使用filter-branch命令解决该问题,也未找到该问题的任何解释。 但是有另一种方法可以达到类似的效果,这对我有用。 它基于子树命令。 我在此处找到了对该方法的参考, 将子目录分离(移动)到单独的Git存储库中,并在此处使用了该示例的示例https://makingsoftware.wordpress.com/2013/02/16/using-git-subtrees-for-repository-分离/ 。 我遵循了那篇文章,对我来说效果很好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.