从git索引中删除大文件并同步所有分支

时间:2019-02-14 22:48:38

标签: git indexing

使用git filter-branch删除索引后,同事的推动将旧索引带回。

我运行了一个bitbucket存储库,它的大小增长到2GB以上,在这里它是只读的。为了恢复这种情况,他们建议重置为先前的提交并使用git filter分支清理我的索引。我做到了,并取得了成功。完成并修剪后,我的本地大小size-pack(git计数对象)降至300MB。但是bitbucket只降到了1.2GB,我不明白它们之间的区别,但是有一个更大的问题。

当我的同事(也使用该分支)推动更多更改时,大小又跳回了2GB以上。显然,他们仍然在本地拥有索引(尽管他们首先进行了git pull)。

我运行的命令是...

git filter-branch --force --index-filter 'git rm -r --ignore-unmatch NAME_OF_DIRECTORY_I_DONT_WANT_ANYMORE' --prune-empty --tag-name-filter cat -- --all

对所有相关目录重复,然后:

git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d

git reflog expire --expire=now --all

git gc --prune=now --aggressive

git push --all --force

1。)我不明白发生了什么事,有人可以启发我吗?

2。)当我通过git filter-branch,修剪等并再次推送到服务器来解决问题时,如何确保我的同事也得到这些更改?因此,我们不会不断重复循环吗?

1 个答案:

答案 0 :(得分:0)

最极端的方法是:让它们从新的git克隆开始。

如果他们需要保留一些本地分支:一种基本方法是将文件从其旧克隆复制到新克隆;另一种方法是将旧存储库添加为新克隆的远程目录,然后获取并重新设置基址。

一种避免再次出现已删除文件夹的方法是在git服务器上添加一个预接收钩子,该钩子将拒绝包含禁止文件夹之一的任何提交,或者在存储库上预推钩子你的同事