繁体   English   中英

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

[英]Git: erase files from repository from previous commits

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

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

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测试分支绝对不会受到伤害。

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

git branch测试; git checkout测试

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

  1. git ls-files | grep * .class
  2. for git ls-files |grep *.class ; 做echo $ file; 完成; 这只是检查我的for循环是否会在rm之前拥有我想要的所有文件
  3. for git ls-files |grep *.class ; 做git rm --cached $ file; 完成;

然后你将它提交给你的git repo并把它放到你的.gitignore中:

syntax: regexp
*.class

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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