我们想要阻止:
-
非常大的文本文件(每个文件大于50MB)被提交到
git
而不是git-lfs
,因为它们会膨胀git历史记录 . -
问题是,其中99%<1MB,应该承诺更好地进行差异化 .
-
大小不一致的原因:这些是YAML文件,它们通过base64编码支持二进制序列化 .
-
我们无法可靠地防止二进制序列化的原因:这是一个Unity项目,由于各种原因需要二进制序列化 .
鉴于:
-
GitHub托管缺乏预接收挂钩支持 .
-
git-lfs缺少文件大小属性支持 .
问题:
-
如何可靠地防止大文件被添加到提交?
-
这可以通过repo中的配置文件完成,这样所有用户都可以优雅地遵循此规则吗?
-
如果没有,可以通过bash命令别名来完成这一点,这样可信用户在意外
git add
一个大文件并且git-lfs
不处理时会看到警告消息?
(我们的环境是macOS . 我已经看了很多解决方案,到目前为止还没有满足我们的需求)
2 回答
好吧,在CodeWizard和this SO answer的帮助下,我设法自己创建了一个很好的指南:
首先,设置你的repo
core.hooksPath
:其次,在
.githooks
文件夹中创建这个pre-commit
文件,这样就可以跟踪它(gist link),然后记得用chmod +x
赋予它执行权限 .现在,假设您正确设置
.gitattributes
和git-lfs
,当您尝试git commit
并确保git-lfs未跟踪的所有暂存文件(在.gitattributes
中指定)时,此预提交挂钩将运行,将满足指定的文件大小限制 .您的仓库的任何新用户都需要自己设置
core.hooksPath
,但除此之外,事情应该可行 .希望这有助于其他Unity开发人员与不断增长的git repo大小抗争!
core.hooksPath
Git v2.9 添加了在远程文件夹上设置客户端挂钩的功能 . 在此之前,钩子必须放在
.git
文件夹中 .这将允许您编写脚本并将它们放在任何地方 . 我假设你知道什么是钩子,但如果没有随意问 .
怎么做?
通常,您将钩子放在repo(或任何其他常见文件夹)中 .