Git:在多个分支中删除文件夹的内容

时间:2010-04-01 00:02:23

标签: git

我正在将SVN存储库转移到Git中,需要从所有分支和标记中删除特定目录(sites / default / files / *)中的所有文件。原因是此目录中的所有文件都是在过去很长时间内意外提交的,现在使Git存储库的大小为900+ MB。此存储库尚未共享,因此无需担心更改SHA等。

有任何帮助吗?我已尝试按照http://github.com/guides/completely-remove-a-file-from-all-revisions的说明操作,但它们似乎对我不起作用。

2 个答案:

答案 0 :(得分:1)

“似乎没有用”是什么意思?没有任何细节,很难提供帮助。

最有可能的事情是,这些指令使用HEAD进行过滤,因此它只会过滤从您现在检出的任何内容可以访问的提交。你可能想对所有分支机构这样做;而不是git filter-branch ... HEAD,您可以使用git filter-branch ... -- --all--表示过滤分支选项的结束,--all表示过滤所有参考。

我能给出的最好的一般建议是阅读filter-branch man page。它也包含一些例子。

最后,请记住旧物体留在回购中。 Debilski谈到了这一点,提到你必须修剪旧对象(git gc --prune=now)或者重新放回回购以查看尺寸差异。这将在当地适用于您。

要在遥控器上清理它......好吧,我相信github最终会运行git gc,但它会使用默认的剪枝设置,所以它们不会被修剪几周。否则,您可以删除并重新创建项目。我不知道有什么方法可以在github上强制使用gc。

答案 1 :(得分:0)

如果您的回购中有标记,则必须将--tag-name-filter cat添加到git filter-branch命令。

当然,要看到过滤的任何影响,你必须修剪提交 - 或者更好的是:将repo克隆到其他地方并查看它现在是否更小。