我在Github上。我设置了一个.gitignore文件,其中指定了不添加到未来提交的文件,因为我试图减轻克隆的负担。现在,我需要从所有以前的提交中删除所有这些.class文件,仅共享必要的源代码,否则无论我如何努力,它总是会重量增加50mb左右。我看了一下http://cheat.errtheblog.com/s/git,我认为我可能需要这些命令的组合,但我真的不想搞砸我的工作。谢谢。
我在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
应该已经准备好被上传到上游了。
另外,如果您对此操作的结果感到紧张,可以在克隆和 GitHub 测试分支上进行实验,这永远不会有害。
在尝试之前,切换到测试分支当然是一个好主意:
git branch testing; git checkout testing
我所做的就是在提交的文件树中找到所有的类文件,然后从 git 中删除它们:
git ls-files |grep *.class
; do echo $file; done;
这只是检查我的 for 循环是否有我想要的所有文件,然后再进行 rm 操作git ls-files |grep *.class
; do git rm --cached $file; done;然后将其提交到您的 git 存储库,并将其放入 .gitignore 文件中:
syntax: regexp
*.class
完成后,您可以选择将其合并到主分支并推送,或者在主分支上重复相同的操作。