我正在使用 git-fat 和 git 来处理大型二进制文件。我试图解决的问题是,如果 git-fat 不处理大型二进制文件,则防止它们被添加到本地提交中。
我的方法是更新预提交以阻止所有二进制文件并仅允许文件 IF:
- 运行了
git fat init
- .gitfat 文件存在并配置了 rsync
- 在文件上运行
git check-attr filter
以验证filter: fat
在输出中
我是不是错过了一个技巧?用git
和git-fat
例如,当对二进制文件调用 git add
时,我可以对 .git/fat/objects 做些什么来确定 git-fat 处理了该文件吗?
最佳答案
Am I missing a trick with this?
最好在服务器端添加一个限制,这将限制/阻止推送的大小,防止任何可能从裂缝中掉下来的大型二进制文件通过。
检测是否git fat init
被执行后,你可以简单地查询git config filter.fat.clean
和git config filter.fat.smudge
的值。
git-fat 的有趣之处在于它不需要 Git 托管服务器本身的任何特殊功能/支持:大文件的存储/替换由本地过滤器处理。
同一文件管理的更新版本是 git lfs ,它也通过 Git 过滤器运行。
当然,不需要过滤器且完全自动化的最终解决方案是 VFS for Git , Git Virtual Filesystem由 Microsoft 开发,并慢慢 merge 回 Git 本身。但它确实需要支持该功能的 Git 存储库托管服务器。
OP 添加:
Is there anything I can do with the .git/fat/objects to determine that git-fat handled the file when git add was called on the file?
命令git fat verify确实会检查每个对象:可以调整它以查看特定文件,并检查其自身与 catalog_objects
之间的 sha1。
关于git:如果 git-fat 不处理二进制文件,则保证不会将它们添加到提交中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52852054/