我团队中的某个人将一个大文件推送到git服务器,团队中的每个人现在都拥有一个带有大文件的项目克隆。
我按照http://help.github.com/removing-sensitive-data/中的指南操作,它可以在我的本地源代码树和远程服务器上运行。但是,一旦另一个人从远程服务器获取新数据,他就可以通过将新提交推送到服务器来轻松地重新引入大文件。
通常,团队成员将执行以下操作以与其他人分享他的提交:
git fetch origin
git rebase origin/master
git push origin
在'rebase'步骤中,旧的大文件在其本地提交中重新引入。当然,直接的方法是在删除大文件后要求团队中的每个人重新克隆项目,但不是每个人都乐意这样做。我找到了除了为每个人重新克隆整个项目之外的其他方法。
有什么建议吗?感谢。
答案 0 :(得分:3)
看一下filter-tree。您需要编辑引入该文件的提交。一旦完成,每个人都可以获取。这将使他们的repos中的非快进远程分支 - 删除违规文件后的每次提交现在都会有所不同。当他们在新的远程分支上重新设置当前的更改时,它不应再推送大对象了。
另一种方法是执行编辑违规提交的git rebase --preserve-merges -i
。
答案 1 :(得分:0)
如果删除大文件的执行时间合理,您可以编写一个脚本来删除文件,指示每个人在rebase之后在本地运行脚本,并使用钩子检查它是否重新引入。< / p>
答案 2 :(得分:0)
使用git filter-branch
(不是过滤树,而不是其他帖子提及),progit书有一个详尽的例子。这一章在这里