使用Git管理大型二进制文件
我正在寻找如何处理我的源代码(Web应用程序)所依赖的大型二进制文件的意见。 我们目前正在讨论几个备选方案:
你对此有何经验/想法?
另外:有没有人有多个Git仓库的经验,并在一个项目中管理它们?
这些文件是用于生成包含这些文件的PDF的程序的图像。 这些文件不会经常更改(如年),但它们与程序非常相关。 没有这些文件,该程序将无法工作。
如果程序在没有这些文件的情况下无法正常工作,似乎将它们拆分成单独的回购是一个坏主意。 我们有大型的测试套件,我们可以分解成单独的回购,但这些都是真正的“辅助”文件。
但是,您可能可以在单独的回购库中管理这些文件,然后使用git-submodule
将它们以合理的方式引入到您的项目中。 所以,你仍然拥有所有源代码的完整历史记录,但据我所知,你只有一个相关版本的图像子模块。 git-submodule
设施应该帮助您保持正确版本的代码与正确版本的图像一致。
这里有一个很好的Git Book子模块的介绍。
我最近发现了git-annex,我觉得它很棒。 它旨在有效地管理大型文件。 我把它用于我的照片/音乐(等)收藏。 git-annex的开发非常活跃。 可以从Git存储库中删除文件的内容,只有Git(通过符号链接)跟踪树层次结构。 但是,要获取文件的内容,在拉/推后需要执行第二步,例如:
$ git annex add mybigfile
$ git commit -m'add mybigfile'
$ git push myremote
$ git annex copy --to myremote mybigfile ## This command copies the actual content to myremote
$ git annex drop mybigfile ## Remove content from local repo
...
$ git annex get mybigfile ## Retrieve the content
## or to specify the remote from which to get:
$ git annex copy --from myremote mybigfile
有很多命令可用,并且网站上有很好的文档。 Debian提供了一个软件包。
自2015年4月以来,另一种解决方案是Git Large File Storage(LFS) (由GitHub提供)。
它使用git-lfs (请参阅git-lfs.github.com )并使用支持它的服务器进行测试: lfs-test-server :
您只能将元数据存储在git仓库中,并在其他地方存储大型文件。