【问题标题】:Committing binaries to SVN将二进制文件提交到 SVN
【发布时间】:2010-09-16 18:57:06
【问题描述】:

我搜索了一下,但没有找到满意的答案,所以我想听听您对此的看法。

我有几个工具必须不时更新并部署到一些服务器上。源代码在 SVN 存储库中进行管理。

为了省去通过 ftp 或类似方式将二进制文件复制到生产服务器的麻烦(我无法在服务器上构建项目),我正在考虑在存储库中创建一个区域以将它们提交为好吧。然后,我可以在需要时从 svn 服务器中检索最新版本的可执行文件。

由于我不一定要在每次处理源代码时都更新/提交二进制文件,因此我不会将二进制文件的文件夹创建为我的项目的子文件夹。提交二进制文件将(并且应该)是一个单独的、有意识的行为。

--- trunk
    --- project1
    --- project2
--- built
    --- project1
    --- project2

据我所知,这个设置应该没有问题。我真正想要的是给源版本和二进制文件一个单独的标签,以便能够一次检索属于一起的所有内容。

--- tags/project1/release2/ 
         includes files from 
--- trunk/project1/ revision 487 and
--- built/project1/ revision 488 

我所追求的是否可能,我将如何实现它? 我是否应该寻找其他方法来解决这个问题?

【问题讨论】:

标签: svn tags


【解决方案1】:

您的设置没有什么奇怪的(当我需要保留确切的位时,我正在使用构建工具和构建工件做类似的事情。)您想要的布局绝对是可能的 - “包含”其他分支的特定版本或 tags/project1/release2 中的标签,您需要做的就是在 tags/project1/release2 上设置 svn:externals properties,并引用您想要引入的源和修订版的 URL,然后您就可以设置了。

【讨论】:

    【解决方案2】:

    虽然我无法直接回答您的问题,但我会告诉您另一种方法。

    我们有一个单独的文件服务器用于二进制发布,其备份策略类似于 SVN 服务器的备份策略,并且每个项目都有一个目录,其中包含任何属于该项目但不在 SVN 中的内容,包括发布目录.二进制版本的整个历史都存储在这个目录中,因此您可以从任何地方(当然,从我们的网络中)获取二进制文件,而不需要 SVN,即将它复制到某个生产服务器,发送给客户或下载在虚拟机中测试。无需结帐或重建。

    我发现这个设置比将二进制文件提交到 SVN 更容易管理。如果您需要具有特定版本的精确二进制文件,它就在那里,前提是该版本已提供给客户端(但是,为什么您需要一个从未见过阳光的二进制文件?)。

    【讨论】:

      【解决方案3】:

      我相信这是通过使用“外部”来处理的。但是,有一些陷阱,我还没有找到让我感到舒服的东西。我按照您的建议使用我的源库,但我仍然手动执行。

      【讨论】:

        【解决方案4】:

        虽然从技术上讲,这种方法可以正常工作,但我个人不会使用 SVN 来存储这样的二进制文件。

        我有两个原因。 最初我认为 SVN 紧随 CVS 之后并没有存储二进制差异,事实证明我错了。无论如何:

        0) “技术上”您不需要存储生成的文件,因为它们可以在必要时重新构建。显然这在现实生活中是不切实际的,但恕我直言,您仍然应该考虑“我怎样才能为生成的东西构建缓存。”
        SVN 并不真正适合这种使用模式。这本身并不是一个真正的观点,但我想要传达的是“在 SVN 中放置一些东西意味着你关心它并想要存档它”——如果你不这样做,恕我直言,你不应该传达这个隐含或其他方式的消息

        1) 这很烦人。如果有人检查你的 repo 的顶部,他们也会得到所有的二进制文件。如果你有超过一两个兆,这将使人们不得不无缘无故地等待这些东西(并耗尽他们的磁盘空间)。这可以通过设置一个单独的存储库来解决,但是一旦你这样做了,恕我直言,你最好只设置一个单独的网络服务器。

        2) SVN 旨在永久保存您的所有文件。 It is very painful and time consuming to completely remove things from the repository,这使得存储不需要存储的东西变得有问题。

        我建议您只使用网络服务器来存储您的二进制文件。 (SVN毕竟是一个网络服务器**)。在服务器上保留尽可能多的旧二进制文件并进行备份,但是一旦不再需要旧的无用二进制文件,您就可以删除它们。

        ** 是的,我知道它使用 DAV,因此它不仅仅是一个普通的旧网络服务器,而是从部署到生产机器的角度来看,该过程是“我使用 http 从http://blah 下载一些文件” ,所以它也可能是一个。

        【讨论】:

        • @Orion Edwards:1) 实际上,我认为这不是真的。 SVN 只存储差异,而不考虑文件内容(文本/二进制文件) 1b)这正是我建议的结构的原因,不将二进制文件存储为我项目的子文件夹,而是存储在它们自己的独立区域中。存储库。这样,您只有在真正需要它们时才能获得它们。
        • @Orion Edwards:请确保在下次发布之前仔细检查您的事实;来自:subversion.tigris.org/faq.html#binary-files“Subversion 使用了一种对二进制文件和文本文件同样有效的差异化方法”
        • 就像 Miqueella 指出的那样,SVN 可以很好地处理二进制差异。版本化二进制文件占用的空间几乎没有您想象的那么多,并且根据您的链接器(增量),它们可能会有很大差异。此外,SVN 非常不是“网络服务器”。您混淆了 SVN 和 DAV。
        【解决方案5】:

        不确定为什么不想将二进制文件放在 trunk/project1/binaries 树下?也就是说,没有什么可以阻止你让树看起来像这样:

        • 后备箱
          • 项目1
          • 项目2
        • 已建成
          • 项目1
          • 项目2
        • 标签
          • 项目1
          • <tag id>
            • <code as usual>
            • 二进制文件

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-03-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多