【发布时间】:2011-07-15 02:25:44
【问题描述】:
我团队中的某个人将一个大文件推送到了 git 服务器,团队中的每个人现在都有一个包含该大文件的项目的克隆。
我按照http://help.github.com/removing-sensitive-data/ 中的指南进行操作,它可以在我的本地源代码树以及远程服务器上运行。但是一旦另一个人从远程服务器获取新数据,他将通过向服务器推送新的提交来轻松地重新引入大文件。
通常,团队成员会执行以下操作来与他人分享他的提交:
git fetch origin
git rebase origin/master
git push origin
在'rebase'的步骤中,旧的大文件被重新引入到他的本地提交中。当然,直接的方法是要求团队中的每个人在我删除大文件后重新克隆项目,但并不是每个人都愿意这样做。除了为所有人重新克隆整个项目之外,我正在寻找其他方法。
有什么建议吗?谢谢。
【问题讨论】:
-
我不知道如果他们再次推动,他们将如何引入巨大的对象。推送仅推送 old_commit..new_commit 中的任何提交中的提交可访问的对象。
-
假设你有一个提交历史 A-B-C-D-E。有人在提交 C 中添加了大对象。然后我删除了该对象,从 C 重写历史并将新的历史强制推送到服务器。历史现在是 A-B-C'-D'-E'。另一个成员一开始已经克隆了整个项目,他的本地历史也是 A-B-C-D-E。在他获取新的历史记录后,本地提交发生了分歧,即 A-B-C'-D'-E' 在 origin/master 上,而 A-B-C-D-E 在 master 分支上。在 rebase 之后,新的历史就像 A-B-C'-D'-E'-C-D-E,然后他推送到服务器 - 旧的提交 C 被重新引入。