【问题标题】:Attaching a binary to a Git tag将二进制文件附加到 Git 标签
【发布时间】:2011-12-11 02:22:08
【问题描述】:

我正在开发移动应用程序(iPhone、Android 和 Blackberry),最近从 SVN 转换为 Git。

在发布后,在 SVN 中,我标记相关的分支/修订版以确保其状态得到保留,然后我将一个目录添加到此标记并放入已发布的二进制文件以及(对于 iPhone)调试符号文件那个确切的构建(用于象征以后的任何崩溃报告)。这些文件不需要进行版本控制,但它是一个方便的地方,可以将历史工件与代码一起存储以确保它们被备份(SVN 有备份策略,而我的 CI 服务器上的构建没有)。

我正在尝试找出 Git 中的最佳等价物。最接近的可能是创建一个新分支,添加二进制文件,标记它,然后删除该分支。但是,我想知道是否有更好的方法来做到这一点?

理想情况下,我想创建一个标签,然后将二进制文件作为未版本控制的文件附加到标签上。这样,它们实际上不会出现在源代码树中,但它们存在于存储库中,与标记相关联,以便任何有权访问存储库的人根据需要进行检索。 Git 中是否有与此等价的东西?

【问题讨论】:

    标签: git svn version-control tags backup


    【解决方案1】:

    VCS 不是存储任何交付元素(如二进制文件)的理想位置,主要是因为:

    • 他们不会受益于 VCS 的功能(分支、合并、差异......)
    • DVCS(分布式 VCS)会在每次发布时看到其存储库的大小会大幅增加,这会使该存储库的任何克隆变得非常麻烦。

    交付最好存储在人工制品存储库中(例如Nexus),其中checksum 密钥(SHA1、MD5)将自动计算并与这些交付相关联,确保您可以取回它们以用于生产,同时检查它们的完整性。

    这意味着拥有一个独立存储库(来自 VCS 存储库)来管理这些元素。


    正如Uselessanswer 中所述,您可以使用git notes 将二进制blob 关联到git 对象(包括标签)

    原则上,便笺是常规的 Git blob,并且可以接受任何类型的(非)格式。您可以使用 git hash-object 从任意文件安全地创建注释:

    $ cc *.c
    $ blob=$(git hash-object -w a.out)
    $ git notes --ref=built add -C "$blob" HEAD
    

    如果不定期清理这些笔记,唯一的问题是回购的大小可能会失控。


    另一种方法是使用 git-annex,它允许将 git 提交与 external 内容(意味着可以是二进制的内容,一样大根据您的需要)。

    git-annex 允许使用 git 管理文件,而无需将文件内容检查到 git。
    虽然这看起来很矛盾,但在处理比 git 目前可以轻松处理的文件时,它很有用,无论是由于内存、时间或磁盘空间的限制。

    【讨论】:

      【解决方案2】:

      git notes 的联机帮助页描述了如何使用它们将任意二进制 blob 与对象相关联。想要一个链接,或者这足以继续吗?

      【讨论】:

        【解决方案3】:

        由于@VonC says VCS 不适合存储未版本控制的二进制文件。

        要仅使用 git 解决问题,您可以为人工制品创建一个单独的 git 存储库,并将重新创建它们所需的源存储库添加为 submodules

        在每次公开发布时,将新的工件提交到存储库并更新子模块引用。子模块直接指向提交,因此您始终知道哪些来源创建了特定的工件。

        通常 git 子模块使用起来非常混乱,但在这种有限的情况下(没有分支,没有直接编辑子模块)它们可能很有用。

        注意 git 不太适合管理大的二进制文件。见Managing large binary files with git

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-10-07
          • 2011-10-13
          • 2013-05-31
          • 1970-01-01
          • 1970-01-01
          • 2017-05-12
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多