我对使用git真的很陌生,并且犯了一个错误,即将我的(大)数据文件(在大.RData文件上)也推送到了gitlab上的在线存储库中。现在已达到我的最大大小限制,无法再进行任何推送。所以我想删除数据文件。我找到了git的filter-branch
命令。但是问题是:在很早的提交中,文件被称为datafile_early.RData
,然后在几次提交后,该文件被删除并被datafile_later.RData
取代(我也在该存储库上与其他人一起工作)。
那我该如何从历史中清除datafile_early.RData
?我试过了:
git filter-branch -f --tree-filter 'rm datafile_early.RData'
,它开始从第一次提交中将其删除,但是由于后来的提交失败,它不再能找到该文件。
Rewrite a9c05c45dd0c2dacb7ba79cf829fb76a3fb70da3 (4/22) (22 seconds passed, remaining 99 predicted) rm: datafile_early.RData: No such file or directory
tree filter failed: rm datafile_early.RData
我还有什么其他选择?
答案 0 :(得分:1)
如果使用num| value (a) | value (b)
-------------------------
1 | 5 | 7
2 | 6 | 9
:
git filter-branch
非常慢;尽可能使用--tree-filter
。第二点是一个Lasse V. Karlsen mentioned in a comment:您可能希望树过滤器命令读取--index-filter
来删除存在的这些文件中的任何一个,即使没有删除任何内容,也要成功。
要解决第一点,请注意,可以将由rm -f datafile_early.RData datafile_later.RData
命令组成的树过滤器替换为由rm
命令组成的索引过滤器。在这种情况下,合适的匹配命令为:
git rm --cached
整个git rm --cached --ignore-unmatch datafile_early.RData datafile_later.RData
命令因此可能是:
git filter-branch
(可选地,删除反斜杠-换行符序列以使其全部变成一行),其运行时间应比git filter-branch \
--index-filter \
'git rm --cached --ignore-unmatch datafile_early.RData datafile_later.RData' \
--tag-name-filter cat -- --all
变体少得多。