草庐IT

git - 对于文本文件的 GitHub 100MB 文件大小限制,是否有任何好的解决方法?

coder 2023-06-24 原文

我有一个 190 MB 的纯文本文件,我想在 github 上进行跟踪。

文本文件是我们的文本转语音引擎的发音词典文件。我们定期在文本文件中添加和修改行,差异相当小,因此从这个意义上说它非常适合 git。

但是,GitHub 有严格的 100 MB 文件大小限制。我已经尝试过 GitHub 大型文件存储服务,但每次更改时都会上传整个 190 MB 文件的新版本 - 所以如果我沿着这条路走下去,它会迅速增长到许多千兆字节。

我想将文件保留为一个文件而不是拆分它,因为这就是我们目前的工作流程,并且需要一些编码才能允许多个文本文件作为我们工具中的输入/输出(而且我们没有太多的开发资源)。

我的一个想法是,也许可以设置一些提交前和提交后的 Hook 来自动拆分和连接大文件?这可能吗?

其他想法?

编辑:我知道 StackOverflow 上类似问题中描述的 100 MB 文件大小限制,但我不认为我的问题是重复的,因为我询问的是具体案例差异小且频繁的地方(我不是要上传大的 ZIP 文件或任何东西)。但是,我的理解是 git-lfs 仅适用于很少更改的文件,而普通的 git 将非常适合我正在描述的文件类型;除了 GitHub 有文件大小限制。

更新:昨天我尝试创建一个小型跨平台程序,使用 git hooks 将文件拆分和 merge 成更小的文件。它有点工作但并不真正令人满意。你需要用 .gitignore 排除你的大文本文件,这使得 git 不知道它是否已经改变。拆分文件最初未被 git statusgit commit 检测到,并导致与此 SO 问题中描述的相同问题,这非常烦人:Pre-commit script creates mysqldump file, but "nothing to commit (working directory clean)"? 设置 cron 作业 (linux) 和计划任务 (windows) 以定期自动重新生成拆分文件可能会解决这个问题,但自动设置并不容易,可能会导致用户计算机出现性能问题,而且不是很优雅解决方案。可能还需要一些 hacky 解决方案,例如动态修改 .gitignore,并且您绝不会得到实际文本文件的差异,只会得到拆分文件(尽管这可能是可以接受的,因为它们非常相似)。

所以,睡过头了,今天我认为 git hook 方法毕竟不是一个好的选择,因为它有太多的怪癖。正如@PyRulez 所建议的那样,我想我必须看看 GitHub 以外的其他服务(不幸的是,因为我喜欢 github)。托管解决方案将更可取,以避免必须管理我们自己的服务器。我也希望它公开可用...

更新 2:我看过一些 GitHub 的替代品,目前我倾向于使用 GitLab。我已经就提高 100MB 限制的可能性联系了 GitHub 支持人员,但如果他们不这样做,我将只针对这个特定项目切换到 GitLab。

最佳答案

清洁和涂抹

您可以使用 clean 和 smudge 来压缩您的文件。通常,这不是必需的,因为 git 会在内部对其进行压缩,但由于 gitHub 的行为很奇怪,这可能会有所帮助。主要命令如下:

git config filter.compress.clean gzip
git config filter.compress.smudge gzip -d

GitHub 会将其视为压缩文件,但在每台计算机上,它都会显示为文本文件。

参见 https://git-scm.com/book/en/v2/Customizing-Git-Git-Attributes了解更多详情。

或者,您可以将干净的帖子发送到在线 pastebin,然后从 pastebin 中获取污迹,例如 http://pastebin.com/ . clean 和 smudge 还可以有许多其他组合。

关于git - 对于文本文件的 GitHub 100MB 文件大小限制,是否有任何好的解决方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34723759/

有关git - 对于文本文件的 GitHub 100MB 文件大小限制,是否有任何好的解决方法?的更多相关文章

  1. ruby-on-rails - 在 Rails 中将文件大小字符串转换为等效千字节 - 2

    我的目标是转换表单输入,例如“100兆字节”或“1GB”,并将其转换为我可以存储在数据库中的文件大小(以千字节为单位)。目前,我有这个:defquota_convert@regex=/([0-9]+)(.*)s/@sizes=%w{kilobytemegabytegigabyte}m=self.quota.match(@regex)if@sizes.include?m[2]eval("self.quota=#{m[1]}.#{m[2]}")endend这有效,但前提是输入是倍数(“gigabytes”,而不是“gigabyte”)并且由于使用了eval看起来疯狂不安全。所以,功能正常,

  2. 屏幕录制为什么没声音?检查这2项,轻松解决 - 2

    相信很多人在录制视频的时候都会遇到各种各样的问题,比如录制的视频没有声音。屏幕录制为什么没声音?今天小编就和大家分享一下如何录制音画同步视频的具体操作方法。如果你有录制的视频没有声音,你可以试试这个方法。 一、检查是否打开电脑系统声音相信很多小伙伴在录制视频后会发现录制的视频没有声音,屏幕录制为什么没声音?如果当时没有打开音频录制,则录制好的视频是没有声音的。因此,建议在录制前进行检查。屏幕上没有声音,很可能是因为你的电脑系统的声音被禁止了。您只需打开电脑系统的声音,即可录制音频和图画同步视频。操作方法:步骤1:点击电脑屏幕右下侧的“小喇叭”图案,在上方的选项中,选择“声音”。 步骤2:在“声

  3. 【高数】用拉格朗日中值定理解决极限问题 - 2

    首先回顾一下拉格朗日定理的内容:函数f(x)是在闭区间[a,b]上连续、开区间(a,b)上可导的函数,那么至少存在一个,使得:通过这个表达式我们可以知道,f(x)是函数的主体,a和b可以看作是主体函数f(x)中所取的两个值。那么可以有,  也就意味着我们可以用来替换 这种替换可以用在求某些多项式差的极限中。方法: 外层函数f(x)是一致的,并且h(x)和g(x)是等价无穷小。此时,利用拉格朗日定理,将原式替换为 ,再进行求解,往往会省去复合函数求极限的很多麻烦。使用要注意:1.要先找到主体函数f(x),即外层函数必须相同。2.f(x)找到后,复合部分是等价无穷小。3.要满足作差的形式。如果是加

  4. 深度学习部署:Windows安装pycocotools报错解决方法 - 2

    深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal

  5. git使用常见问题(提交代码,合并冲突) - 2

    文章目录git常用命令(简介,详细参数往下看)Git提交代码步骤gitpullgitstatusgitaddgitcommitgitpushgit代码冲突合并问题方法一:放弃本地代码方法二:合并代码常用命令以及详细参数gitadd将文件添加到仓库:gitdiff比较文件异同gitlog查看历史记录gitreset代码回滚版本库相关操作远程仓库相关操作分支相关操作创建分支查看分支:gitbranch合并分支:gitmerge删除分支:gitbranch-ddev查看分支合并图:gitlog–graph–pretty=oneline–abbrev-commit撤消某次提交git用户名密码相关配置g

  6. HBase Region 简介和建议数量&大小 - 2

    Region是HBase数据管理的基本单位,region有一点像关系型数据的分区。region中存储这用户的真实数据,而为了管理这些数据,HBase使用了RegionSever来管理region。Region的结构hbaseregion的大小设置默认情况下,每个Table起初只有一个Region,随着数据的不断写入,Region会自动进行拆分。刚拆分时,两个子Region都位于当前的RegionServer,但处于负载均衡的考虑,HMaster有可能会将某个Region转移给其他的RegionServer。RegionSplit时机:当1个region中的某个Store下所有StoreFile

  7. ruby-on-rails - Ruby 中意外的大小写行为 - 2

    我在一段非常简单的代码(如我所想)中得到了一个错误的值:org=4caseorgwhenorg=4val='H'endputsval=>nil请不要生气,我希望我错过了一些非常明显的东西,但我真的想不通。谢谢。 最佳答案 这是典型的Ruby错误。case有两种被调用的方法,一种是你传递一个东西作为分支的基础,另一种是你不传递的东西。如果您确实在case中指定了一个表达式语句然后评估所有其他条件并与===进行比较.在这种情况下org评估为false和org===false显然不是真的。所有其他情况也是如此,它们要么是真的,要么是假的。

  8. ruby - 改变替换的大小写 - 2

    我有以下内容:text.gsub(/(lower)(upper)/,'\1\2')我可以将\2替换为大写吗?类似于:sed-e's/\(abc\)/\U\1/'这在Ruby中可行吗? 最佳答案 查看gsub文档:str.gsub(模式){|匹配|block}→new_str在block形式中,当前匹配字符串作为参数传入,$1、$2、$`、$&、$'等变量将被适当设置。block返回的值将替换为每次调用的匹配项。"alowerupperb".gsub(/(lower)(upper)/){|s|$1+""+$2.upcase}

  9. 语法类似于 GitHub Flavored Markdown 的 Ruby markdown 解释器? - 2

    我使用Jekyll运行博客,并认为我会解决RedcarpetMarkdown解释器,因为它是developedandusedbyGitHub.好吧,我只是碰巧遇到了一个错误,去检查问题,然后foundthis.Maintainersays,"Asyouprobablyhavenoticed(harharharhar)Idon'thavetimetomaintainRedcarpetanymore.It'snotapriorityforme(IfindMarkdownthoroughlyboring)andit'snotapriorityforGitHub,becausewenolong

  10. ruby - Dropbox 类似 git 的服务——没有 rsync 和 inotify - 2

    关于如何使用git设置类似Dropbox的服务,您有什么建议吗?您认为git是解决此问题的合适工具吗?我在考虑使用git+rush解决方案,你觉得怎么样? 最佳答案 检查这个开源项目:https://github.com/hbons/SparkleShare来自项目的自述文件:Howdoesitwork?SparkleSharecreatesaspecialfolderonyourcomputer.Youcanaddremotelyhostedfolders(or"projects")tothisfolder.Theseprojec

随机推荐