提交二进制文件到SVN

问题描述:

我已经搜索了一下,但还没有找到满意的答案,所以我想听听你对此的看法。提交二进制文件到SVN

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

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

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

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

据我所知,这个设置应该没有问题。我真正喜欢的是将源修订版和二进制文件都放在一个标记中,以便能够一次检索出属于同一物的所有内容。

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

是我在追求什么,我将如何实现它? 我是否应该考虑解决此问题的其他方法?

+0

[SVN和二进制文件]的可能的重复(http://stackoverflow.com/questions/191533/svn-and-binaries) – 2015-03-10 00:40:26

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

不知道为什么你不想把二进制文件放在trunk/project1/binaries树下?话虽如此,也不应该有树看起来像这样阻止你:

  • 干线
    • PROJECT1
    • 项目2
  • 内置
    • PROJECT1
    • 项目2
  • 标签
    • PROJECT1
    • <tag id>
      • <code as usual>
      • 二进制

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

虽然我不能直接回答你的问题,但我会告诉你一个替代方法。

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

我发现这个设置比将二进制文件压缩到SVN更容易管理。如果你需要一个特定版本的确切二进制文件,它只是在那里,只要版本已经发布给客户端(但是,为什么你需要一个从未见过太阳光的二进制文件?)。

虽然技术上这种方法将工作得很好,但我个人不会使用SVN来存储这样的二进制文件。

我有两个理由为什么这种情况。 最初我以为SVN跟在CVS之后,并没有存储二进制差异,事实证明我错了。无论如何:

0)“技术上”你不需要存储生成的文件,因为它们可以重新构建,如果需要的话。显然这在现实生活中并不实际,但是恕我直言,你仍然应该考虑'如何为生成的东西建立一个缓存。'
SVN并不真正适合这种使用模式。这本身并不是一个真正意义上的问题,但是我想传达的是“在SVN中放入东西意味着你在意它并且想要将它归档” - 如果你不这样做,你不应该传达这个消息,隐式或其他

1)这很烦人。如果有人检查你的回购顶部,他们也会得到所有的二进制文件。如果你有超过一两个兆字节的话,这会让人们不得不等待这些东西(并且耗尽他们的磁盘空间)。这可以通过建立一个单独的存储库来解决,但是一旦你做了这个恕我直言,你可能只是建立一个单独的网络服务器。

2)SVN旨在永久保留所有文件。 It is very painful and time consuming to completely remove things from the repository,这使得存储你不需要存储的东西成为可疑。

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

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

+1

@Orion Edwards:请确保您在下次发布之前仔细检查您的事实;来自:http://subversion.tigris.org/faq.html#binary-files“Subversion使用了一种在二进制文本和文本文件上同样适用的差异化方法” – Miquella 2008-10-12 20:43:04