Py学习  »  Git

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

Joey O • 5 年前 • 1331 次点击  

使用git filter分支删除索引后,同事的推送操作将旧索引带回来。

我运行了一个bitbucket repo,它的大小增长到了2gb以上,变成了只读的。为了恢复这种情况,他们建议重置为以前的提交,并使用git filter分支清理我的索引。我成功地做到了。完成此操作并进行修剪后,我的本地大小大小包(git count对象)降至300MB。不过Bitbucket只降到了1.2GB,我不明白有什么区别,但还有一个更大的问题。

当我的同事,也使用那个分支,推动更多的变化,大小跳回到超过2GB。显然,他们仍然在本地拥有索引(尽管他们已经先做了git拉取)。

我运行的命令是…

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、pruning等方法再次修复这种情况,并推送到服务器上时,如何确保我的同事也得到这些更改?所以我们不会一直重复这个循环?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/44303
 
1331 次点击  
文章 [ 1 ]  |  最新文章 5 年前
LeGEC
Reply   •   1 楼
LeGEC    6 年前

最激烈的方法是:让他们从一个新的git克隆开始。

如果需要保留一些本地分支:一种基本方法是将文件从旧克隆复制到新克隆;另一种方法是将旧repo添加为新克隆的远程,然后fetch+rebase。

避免您删除的某个文件夹再次出现的一种方法是在git服务器上添加一个pre-receive钩子,该钩子将拒绝包含一个禁止文件夹的任何提交,或者在同事的repo上添加一个pre-push钩子。