将二进制文件附加到Git标记

时间:2011-10-19 16:26:12

标签: git svn version-control tags backup

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

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

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

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

3 个答案:

答案 0 :(得分:6)

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

  • 他们不会受益于VCS(分支,合并,差异......)的功能
  • DVCS(分布式VCS)在每次发布时都会看到其repo的大小会大量增加,这会使所述repo的任何克隆都非常麻烦。

交付更好地存储在人工制品库(例如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提交与外部内容相关联(意味着可以是二进制的内容,你可能需要它。)

  

git-annex允许使用git管理文件,而无需将文件内容检入git   虽然这看似矛盾,但是当处理大于git的文件当前可以轻松处理时,无论是由于内存,时间还是磁盘空间的限制,它都很有用。

答案 1 :(得分:2)

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

答案 2 :(得分:0)

作为@VonC says VCS不适合存储未版本化的二进制文件。

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

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

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

当心git不太适合管理大二进制文件。请参阅Managing large binary files with git