防止用户将膨胀的git提交推送到中央存储库

防止用户将膨胀的git提交推送到中央存储库,git,github,version-control,Git,Github,Version Control,我正在管理一个代码项目。代码的大多数开发人员都是研究生,其中许多是Git的新手。在很多情况下,学生会意外地将大型文件(如模拟结果)添加到存储库并推送到GitHub,导致repo的大小增加。显然,长期的解决方案是更好地教育如何使用.Git文件和良好的Git实践;然而,一个万无一失的系统显然仍然是必要的 因此,我的问题是:在将所有新提交添加到远程存储库之前,是否有方法对其进行质量检查(或至少设置大小限制)? (注意:我已经有受保护的分支,并要求学生提交合并请求。这可以防止学生破坏代码,但不会阻止添加

我正在管理一个代码项目。代码的大多数开发人员都是研究生,其中许多是Git的新手。在很多情况下,学生会意外地将大型文件(如模拟结果)添加到存储库并推送到GitHub,导致repo的大小增加。显然,长期的解决方案是更好地教育如何使用.Git文件和良好的Git实践;然而,一个万无一失的系统显然仍然是必要的

因此,我的问题是:在将所有新提交添加到远程存储库之前,是否有方法对其进行质量检查(或至少设置大小限制)?


(注意:我已经有受保护的分支,并要求学生提交合并请求。这可以防止学生破坏代码,但不会阻止添加大文件。)

此情况下可用的选项如下:

1.设置分支策略以保护主分支 由于您已经采取了操作,因此可以使用pull reuqest保护主分支。您还可以防止将大型文件添加到提交历史记录中。详细说明防止在提交历史记录中添加大文件的步骤,如下所示:

  • 假设有一个将
    devlop
    branach合并到
    master
    分支的请求,并且在
    develop
    分支中提交了大型文件
  • 通过在
    develope
    分支中提交或在主分支中添加
    .gitignore
    来查看删除大文件的拉取请求,以忽略需要从
    develope
    分支合并的文件
  • 将拉取请求与挤压策略合并,以便在
    master
    分支上仅重新基于一个提交,而不使用大文件

  • 合并后删除
    development
    分支

这样,大型文件就不会添加到git repo中

2.使用客户端钩子 由于服务器端钩子不可用(如max630所述),因此可以使用客户端钩子检查提交或推送

例如,您可以使用
预推
钩子
检查要虚拟化的大小或文件

缺点是当创建新的本地回购时,默认情况下不会配置git挂钩

3.重写提交历史记录以删除大文件 您可以通过
git filter branche
命令重写github repo的提交历史记录一段时间

例如,通过以下方式从所有提交历史记录中删除
test.zip
文件:

git filter-branch --index-filter 'git rm --ignore-unmatch --cached -r test.zip --prune-empty -f -- --all

是的,有,但是官方的方式(使用预接收或更新脚本)需要能够管理服务器,这在github的情况下是不可能的。谢谢Marina。我没有想过使用挤压合并-这似乎是目前最好的解决方案。