我正在将SVN存储库转移到Git中,需要从所有分支和标记中删除特定目录(sites / default / files / *)中的所有文件。原因是此目录中的所有文件都是在过去很长时间内意外提交的,现在使Git存储库的大小为900+ MB。此存储库尚未共享,因此无需担心更改SHA等。
有任何帮助吗?我已尝试按照http://github.com/guides/completely-remove-a-file-from-all-revisions的说明操作,但它们似乎对我不起作用。
答案 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克隆到其他地方并查看它现在是否更小。