Git:从以前的提交中清除存储库中的文件

时间:2010-10-14 11:28:52

标签: git github

我在github上。我设置了一个.gitignore文件,在该文件中,我指定的文件不会被添加到将来的提交中,因为我正在尝试减轻克隆。现在我需要删除所有这些.class文件,例如从所有以前的提交中只分享必要的来源,否则无论我的努力,它总是会增加或减少50mb。我看了http://cheat.errtheblog.com/s/git 我想我可能需要这些命令的组合,但我真的不想做我的工作。 感谢

2 个答案:

答案 0 :(得分:11)

git-filter-branch docs中有一个与您的用例匹配的示例。

git clone project project.tmp
cd project.tmp
git filter-branch --prune-empty --index-filter 'git rm --cached --ignore-unmatch *.class' HEAD 
cd ..
git clone project.tmp project.clean
rm -rf project.tmp
cd project.clean
然后

project.clean应该准备好向上游推进。

PS。如果你对这个操作可能会如何感到紧张,那么试验一个克隆和github测试分支就不会有任何痛苦。

答案 1 :(得分:0)

在尝试此操作之前,切换到测试分支当然是个好主意:

git branch测试; git checkout testing

我所做的只是找到提交文件树中的所有类文件,然后从git中删除它们:

  1. git ls-files | grep * .class
  2. for git ls-files |grep *.class中的文件;做echo $ file;完成;  这只是检查我的for循环是否会在rm
  3. 之前拥有我想要的所有文件
  4. for git ls-files |grep *.class中的文件;做git rm --cached $ file;完成的;
  5. 然后你将它提交给你的git repo并把它放到你的.gitignore中:

    syntax: regexp
    *.class
    

    完成此操作后,您可以选择将其合并到主分支中,然后按或在主分支上重复相同的操作。