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

时间:2018-06-19 16:21:32

标签: git github version-control

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

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

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

1 个答案:

答案 0 :(得分:1)

在这种情况下可用的选项如下:

1。设置分支策略以保护主分支

作为已执行的操作,您可以使用请求请求保护主分支。而且,您还可以防止将大文件添加到提交历史记录中。防止将大文件添加到提交历史记录中的详细步骤,如下所示:

  • 假设有一个合并请求,将devlop分支合并到master分支中,并且在develop分支中提交了大文件。
  • 通过在develop分支中提交或在master分支中添加.gitignore来忽略需要从develop分支合并的文件,查看删除请求以删除大文件。
  • 将拉取请求与壁球策略合并,以便仅基于master分支重新提交一次提交,而没有大文件。

    enter image description here

  • 合并后删除develop分支。

那么大文件将不会添加到您的git repo中。

2。使用客户端挂钩

由于服务器端挂钩不可用(如max630所述),您可以使用客户端挂钩来检查提交或推送。

例如,您可以使用 pre-push钩子检查要加载的大小或文件。

缺点是创建新的本地存储库时,默认情况下未配置git钩子。

3。重写提交历史记录以删除大文件

您可以使用git filter-branche命令在一段时间内重写github存储库的提交历史记录。

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

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