使用Git管理大型二进制文件

我正在寻找如何处理我的源代码(Web应用程序)所依赖的大型二进制文件的意见。 我们目前正在讨论几个备选方案:

  • 手动复制二进制文件。
  • Pro:不确定。
  • Contra:我强烈反对,因为它增加了在建立新网站/迁移旧网站时出现错误的可能性。 建立另一个障碍。
  • 用Git来管理它们。
  • 专业版:删除“忘记”复制重要文件的可能性
  • Contra:扩展存储库并降低管理代码库和结账,克隆等的灵活性需要相当长的一段时间。
  • 单独的存储库。
  • 专业版:检出/克隆源代码的速度一如既往,并且图像已正确存档在自己的存储库中。
  • Contra:删除了在项目中拥有唯一的Git存储库的简单性。 它肯定会介绍一些我没有想过的事情。
  • 你对此有何经验/想法?

    另外:有没有人有多个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仓库中,并在其他地方存储大型文件。

    https://cloud.githubusercontent.com/assets/1319791/7051226/c4570828-ddf4-11e4-87eb-8fc165e5ece4.gif

    链接地址: http://www.djcxy.com/p/16467.html

    上一篇: Managing large binary files with Git

    下一篇: git ignoring a directory, it's like it doesn't exist