如何永久删除整个团队的大文件

时间:2011-03-14 15:07:21

标签: git purge

我团队中的某个人将一个大文件推送到git服务器,团队中的每个人现在都拥有一个带有大文件的项目克隆。

我按照http://help.github.com/removing-sensitive-data/中的指南操作,它可以在我的本地源代码树和远程服务器上运行。但是,一旦另一个人从远程服务器获取新数据,他就可以通过将新提交推送到服务器来轻松地重新引入大文件。

通常,团队成员将执行以下操作以与其他人分享他的提交:

git fetch origin
git rebase origin/master
git push origin

在'rebase'步骤中,旧的大文件在其本地提交中重新引入。当然,直接的方法是在删除大文件后要求团队中的每个人重新克隆项目,但不是每个人都乐意这样做。我找到了除了为每个人重新克隆整个项目之外的其他方法。

有什么建议吗?感谢。

3 个答案:

答案 0 :(得分:3)

看一下filter-tree。您需要编辑引入该文件的提交。一旦完成,每个人都可以获取。这将使他们的repos中的非快进远程分支 - 删除违规文件后的每次提交现在都会有所不同。当他们在新的远程分支上重新设置当前的更改时,它不应再推送大对象了。

另一种方法是执行编辑违规提交的git rebase --preserve-merges -i

答案 1 :(得分:0)

如果删除大文件的执行时间合理,您可以编写一个脚本来删除文件,指示每个人在rebase之后在本地运行脚本,并使用钩子检查它是否重新引入。< / p>

答案 2 :(得分:0)

使用git filter-branch(不是过滤树,而不是其他帖子提及),progit书有一个详尽的例子。这一章在这里

'删除对象'http://progit.org/book/ch9-7.html