我们最近开始使用git,当有人提交了一个大的(~1.5GB文件),然后导致git在各种32位操作系统上崩溃时出现了一个令人讨厌的问题.这似乎是一个已知的错误(git mmaps文件到内存中,如果它无法获得足够的空间,它就无法工作),这不会很快得到修复.
简单(对我们而言)的解决方案是让git拒绝任何大于100MB左右的提交,但我无法想办法做到这一点.
编辑:问题来自意外提交大文件,在这种情况下是一个大的程序输出转储.目的是避免意外提交,只是因为如果开发人员意外地提交了一个大文件,然后尝试将其恢复到存储库是一个下午,没有人可以做任何工作,并且必须修复所有本地分支他们有.
问题具体是什么时候发生的?他们最初提交文件的时间还是文件被推送到其他地方的时间?如果您有一个每个人都推送到的临时存储库,您可以实现一个更新挂钩来扫描大文件的更改引用,以及其他权限等检查。
非常粗略且准备好的示例:
git --no-pager log --pretty=oneline --name-status $2..$3 -- | \
perl -MGit -lne 'if (/^[0-9a-f]{40}/) { ($rev, $message) = split(/\s+/, $_, 2) }
else { ($action, $file) = split(/\s+/, $_, 2); next unless $action eq "A";
$filesize = Git::command_oneline("cat-file", "-s", "$rev:$file");
print "$rev added $file ($filesize bytes)"; die "$file too big" if ($filesize > 1024*1024*1024) }';
Run Code Online (Sandbox Code Playgroud)
(只是为了表明,一切都可以用 Perl 一行完成,尽管它可能需要多行;))
以调用 $GIT_DIR/hooks/update 的方式调用(参数是 ref-name、old-rev、new-rev;例如“refs/heads/master master~2 master”),这将显示添加的文件并在以下情况下中止添加一个太大了。
请注意,我想说的是,如果您要监管此类事情,您需要一个集中点来执行此操作。如果您相信您的团队只会相互交换更改,那么您应该相信他们知道添加巨大的二进制文件是一件坏事。
| 归档时间: |
|
| 查看次数: |
2529 次 |
| 最近记录: |