我有一个190 MB的纯文本文件,想在GitHub上跟踪。
这个文本文件是我们的文本转语音引擎的发音词典文件。我们经常添加和修改文本文件中的行,差异非常小,因此从这个意义上讲,它非常适合git。
然而,GitHub有严格的100 MB文件大小限制。我已经尝试了GitHub大型文件存储服务,但是每次更改都会上传整个190 MB文件的新版本-如果我走这条路,那么这个文件很快就会增长到几千兆字节。
我想保持这个文件作为一个文件,而不是拆分它,因为这是我们当前的工作流程,如果要在我们的工具中允许多个文本文件作为输入/输出,那么需要一些编码(而我们没有太多开发资源)。
我想到的一个主意是,也许可以设置一些预提交和后提交钩子来自动拆分和连接大文件?这可以实现吗?
其他想法?
编辑:我知道在StackOverflow上有类似问题中描述的100 MB文件大小限制,但我不认为我的问题是重复的,因为我正在询问特定情况,即差异小而频繁(我不尝试上传大的ZIP文件或任何其他东西)。但是,我的理解是git-lfs仅适用于很少更改的文件,而常规git非常适合我描述的文件类型;只是GitHub有一个文件大小限制。
更新:昨天我尝试创建一个使用Git钩子将文件拆分并合并为较小文件的小型跨平台程序进行实验。它有点有效,但不是很令人满意。您需要通过 .gitignore 将大文本文件排除在外,这使得Git无法知道它是否已更改。拆分文件最初不会被 git status
或 git commit
检测到,并导致与此SO问题中描述的相同问题,这非常恼人:Pre-commit script creates mysqldump file, but "nothing to commit (working directory clean)"?
设置cron作业(Linux)和计划任务(Windows)以定期自动重新生成拆分文件可能会修复此问题,但自动设置不容易,可能会影响用户计算机的性能,并且不是一种非常优雅的解决方案。某些hacky的解决方法,例如动态修改.gitignore,也可能是必需的,而且您根本无法获得实际文本文件的差异,只能获得拆分文件的差异(尽管这可能可以接受,因为它们非常相似)。
所以,经过一夜的思考,今天我认为Git钩子方法实际上不是一个好选择,因为它有太多的怪癖。正如@PyRulez建议的那样,我认为我必须看一下GitHub之外的其他服务(不幸的是,因为我喜欢GitHub)。托管解决方案比自己管理服务器更可取。我也希望它是公开的...
更新2:我已经查看了一些替代GitHub的方案,目前我倾向于使用GitLab。我已经联系了GitHub支持团队,询问是否可以提高100MB限制,但如果他们不这样做,我就会将此特定项目切换到GitLab。