繁体   English   中英

带有--subdirectory-filter的git filter-branch删除所有文件

[英]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.

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