【问题标题】:Help in understanding SVN Externals帮助理解 SVN Externals
【发布时间】:2009-10-08 03:31:47
【问题描述】:

我正在为我的公司寻找 svn externals,它似乎对我们来说是一个很好的功能。我们有几个产品经常引用共享组件,但有一个坏习惯,即有时会落后于旧版本甚至不同分支的代码库。

我已经阅读了一些关于它们现在如何工作的内容,我想我理解这个概念还可以。我不能 100% 确定多个存储库的不同版本如何链接在一起。

假设我有一个产品和一个库。该产品是针对库构建的,因此其 repo 具有链接到库源的 svn:externals 属性。在 svn:externals 定义中没有特定版本的情况下,当我检查产品的 HEAD 时,我也会得到库的 HEAD。

多年来,我构建了多个版本的产品,每次都参考最新版本的库。有一天,尽管我必须通过手动选择正确的修订版返回并检查产品版本 1。当我这样做时,我会得到哪个版本的库,HEAD 还是我第一次构建它时使用的修订版?

希望我是一名优秀的开发人员,并记得标记我发布的每个产品版本。当我将标签“Product-1-0-0”应用于存储库时,库存储库的正确修订版是否也会被标记?如果我稍后根据标签“Product-1-0-0”检出产品,是否会检出正确的库版本?

【问题讨论】:

    标签: svn version-control externals


    【解决方案1】:

    svn:externals 需要注意的是,如果您想要除主干之外的其他内容,则需要明确指定修订版。 Google "pinning svn:externals" 了解详情。如果您使用的是相当现代的版本,1.5 或更新的 IIRC,那么至少支持相对外部。较旧的版本,例如我目前使用的版本,要求我们使用 每个该死的文件夹svn:externals 属性上的 -rNNNNN 选项显式固定修订。

    我们最终使用来自 tigris.org 的名为 svncopy.pl 的 perl 脚本的修改来完成我们所有的分支和标记。这还不错,但我希望我们在决定大量使用它们之前就知道它做了多少工作。

    【讨论】:

    • 对于 svn:externals,你应该几乎总是盯住你的转速。否则,如果您更改外部引用的事物中的某些内容,则无法将项目回滚到以前的状态。此外,你冒着在不知情的情况下破坏东西的风险。请参阅tortoisesvn.net/docs/nightly/TortoiseSVN_en/…,“使用明确的修订号”。
    【解决方案2】:

    您可以使用date specifiers 确保您在更新时获得相应的修订。

    我们已经为运行 PC-Lint 的工具完成了它;我们喜欢在每个修订版上运行它,以便我们可以区分结果。

    它的实现有点令人讨厌——我们:

    • 确定工作副本的版本(使用svnversion
    • 确定 HEAD 的转速(使用 svn info
    • 获取所有修订版的时间戳,包括 head (使用 svn log
    • 将时间戳增加 0.999 秒以“确定”我们得到了转速(太神奇了!)
    • 更新每个版本(使用svn update -r {sometimestamp}
    • 在工作副本上运行 PC-Lint、diff、mailout、触发 klaxons 等

    (与 Rube Goldberg 相称的复杂性,不是吗?对任何能提出更好解决方案的人表示支持和永恒的感激。)

    您可能还对我刚刚发现的 svn book 的 Peg and Operative Revisions 部分感兴趣——这似乎是一个相对较新的添加。

    【讨论】:

      【解决方案3】:

      您应该阅读依赖管理器 - 我不确定您的平台是什么,但 ivy 和 maven 以更简洁的方式解决了这个问题。

      svn:externals 在 subversion 中没有版本控制。如果有人更改了您的某个外部文件的修订版或标签,您将无法知道更改之前的内容。

      【讨论】:

        【解决方案4】:

        是的,假设您在外部提供了明确的修订号,如docs 中所建议的那样。否则它将使用外部引用的 HEAD 修订版。

        请注意 1.6 中基于文件的 svn:externals。它们看起来很有用,但我今天刚打了this bug :(

        【讨论】:

          【解决方案5】:
          猜你喜欢
          • 1970-01-01
          • 2021-08-28
          • 1970-01-01
          • 2011-09-20
          • 1970-01-01
          • 1970-01-01
          • 2018-12-21
          • 1970-01-01
          • 2011-08-02
          相关资源
          最近更新 更多