0

git由于二进制文件、图像等被意外提交给它,我们的存储库已经增长到一个笨重的大小。目前 repo 中没有大文件,但 repo 的历史记录中有大文件。

我的计划是从我们的git历史记录中删除这些大文件,并且我找到了许多很好的资源和 SO 答案(https://rtyley.github.io/bfg-repo-cleaner/如何删除/删除来自 Git 存储库中提交历史记录的大文件?https://help.github.com/articles/removing-files-from-a-repository-s-history/)。

我的主要问题是我们的 repo(托管在 Bitbucket 上)有许多贡献者,我担心一旦我将大文件从历史记录中删除,我们的贡献者会将push大文件的历史记录备份到远程回购。

具体来说,BFG Repo Cleaner文档指出:

在这一点上,你已经准备好让每个人都放弃他们的旧的 repo 副本,并对好的、新的原始数据进行新的克隆。最好删除所有旧克隆,因为它们会有肮脏的历史记录,您不想冒险推回新清理的存储库。

所以,我的问题是双重的:

  1. 有没有办法确保从旧的 repo 克隆推送不会重新引入大文件?
  2. 如果没有,有没有办法阻止旧的克隆推送,从而要求所有贡献者从新的克隆开始?

谢谢!

4

1 回答 1

1

一般来说,对于 git,您会在originrepo 上使用 pre-receive 钩子。当push收到 a 时,钩子运行;如果钩子不喜欢推送的内容,它会拒绝它。因此,您可以编写一个脚本来查找大型对象、某些文件类型或您认为最有效地执行您的要求的任何内容。请参阅 git 钩子文档(https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks)。

对于 bitbucket,来自https://confluence.atlassian.com/bitbucketserverkb/how-to-create-a-simple-hook-in-bitbucket-server-779171711.html

Bitbucket Server 有两种创建挂钩的主要方法。

推荐的方法是使用我们的 Java 插件开发框架创建插件。尽管强烈建议您在您的 Bitbucket Server 实例的文件系统中创建服务器端 Git 挂钩,但也可以。

该页面继续解释更多关于他们推荐的设置钩子的方法。

于 2018-05-24T12:39:40.923 回答