如何在Github上减小代码仓库的大小

8

我不小心将一些大型测试wav文件提交到了我的代码库,它们占用了我Github账户很多空间。我该如何从历史记录中删除这些文件?

注意:这些文件是一段时间前提交的,不在HEAD提交中。


这里真正的问题可能是重写其他人已经拉取的历史记录 - 这里有很多帖子以及你可以在谷歌上找到的处理特定问题的东西,除了我在答案中提到的手册部分。 - Cascabel
1
目前我是该项目唯一的提交者,因此在这方面事情会变得更容易一些。 - Corban Brook
2个回答

11

如果没有修改历史记录,就无法删除它们,因此如果有人拉取了这些更改,您可能需要处理混乱的情况 - 请参见 从上游恢复man git-rebase 中的变基。根据您的工作流程,这可能相当糟糕 - 无论如何,您可能需要让每个人都意识到他们需要切换到“新”的主分支,并在其上重新设置正在进行的任何工作。

如果提交仍然在最新状态,您可以重置为之前的提交:

git reset --hard HEAD^

或者修改它:
git rm test.wav
git commit --amend

但由于它不再在顶端,你最好的选择可能是使用交互式变基来完成:
git rebase -i <commit-before-mistake>

将您想要修复的提交中的“pick”更改为“edit”,然后开始操作!(如果可以的话)甚至可以删除整个提交*

完成您选择的任何操作后,您将不得不强制推送,因为它不再是快进:
git push -f origin

如果您随后对这些文件进行了修改,那么在继续变基时会遇到问题。它们应该很容易处理,因为您只想要删除这些文件。当然,如果自那时以来已经有了一百个提交,这些都会导致冲突,您可以查看git-filter-branch。手册页面中的相关示例是:
git filter-branch --index-filter ’git rm --cached --ignore-unmatch filename’ HEAD


2
  1. Remove it from your local history on the branch where you committed it. One way to do that is using git commit --amend if it is your HEAD commit; another is git rebase --interactive.
  2. Force push the updated branch to github.

    git push --force github
    

    (where github is the name of your remote for GitHub).

这将从活动历史中删除它。要实际回收空间,GitHub需要进行垃圾回收。如果他们不自动执行此操作,则我不确定是否有明确的方法来执行此操作。您可能需要提交支持请求。


7
每次仓库操作后,GitHub都会进行垃圾回收。 - Jörg W Mittag
@JörgWMittag - 你确定吗?我清理了旧的大文件后推送了分支,在Github上我的仓库大小仍然相同。但是本地仓库已经缩小了。 - isapir

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接