【问题标题】:Source control versioning and references源代码控制版本控制和参考
【发布时间】:2009-11-26 16:37:46
【问题描述】:

我们目前有一个 SVN 存储库,用于存储我们的源代码。我们在那里有大量项目(数百个)和多个通用库等。

这一切都很好,但它在结构上是非标准的。最初我们的目标是标准的“Trunk\”、“Tags\Tag_1.0.0\”样式模型,但我们遇到的问题是我们项目的相对路径停止工作。

EG:

- Common
|- Trunk
|- Tags
||- Tag_1.0.0
- OtherProject
|- Trunk
|- Tags
||- Tag_1.0.0

在这个结构中(我称之为相当标准,如果我错了,请纠正我)OtherProject 中对来自主干文件夹的 common 标记的引用将是“../../Common/Tags/Tag_1.0.0 " 解析为 /Common/Tag_1.0.0 (实际上会有更多......因为项目在后备箱中并不平坦,但这节省了一个巨大的图表)。一旦被标记,虽然相同的相对路径转到“/OtherProject/Common/Tags/Tag_1.0.0”。

我可以想到包含绝对路径的解决方法,但并非所有开发人员都对我们的文件使用相同的文件夹(甚至相同的硬盘驱动器号),在标记之前更改引用,但是当它标记树干时有一些可怕的东西不会编译并希望一旦它在标记文件夹中它就可以工作,或者将每个项目的引用以 DLL 形式放在项目本身中,但这在 Visual Studio 中并不容易(我们将主干引用到主干并不是闻所未闻并同时编辑这两个项目 - 当然稍后再添加标签),它会使我们的 SVN 存储库膨胀,以包含已发布的每个标签的所有构建。

这导致我们将标签放在与 Trunk 相同的层次结构级别。

EG:

- Common
|- Trunk
|- Tag_1.0.0
- OtherProject
|- Trunk
|- Tag_1.0.0

我们不可能是唯一遇到此问题的人,所以我很想知道是否有其他人与这头野兽战斗过,以及他们采取了哪些措施来解决它?是我们的方法有问题还是我们忽略了有助于解决此问题的工具?

【问题讨论】:

    标签: .net visual-studio


    【解决方案1】:

    我能想到的另一个选项,您可以使用 svn:externals features,而不是直接检查所有项目。

    例如,您的主项目将是OtherProject,那么您可以将Common 项目的依赖定义为OtherProject 中的svn:external,并具有您想要的结构。

    更多详情请见svn book on externals

    【讨论】:

    • 这实际上是一个好主意,我们差点就采用了。最后,我们只是根据如果我们的共享库与每个引用应用程序单独签出,签出的大小决定反对它。这是我见过的最好的答案,所以我会打勾,但我开始认为我的错误可能是试图符合标准,即使它对我们不起作用(这些例子中的大多数似乎就像他们在一家做几个大项目的公司里工作得很好,但这不符合我们的商业模式。我们有大量的小项目,有很多共享代码)。
    【解决方案2】:

    您似乎要同时检查整棵树?只需检查您需要的标签/中继线,它们都处于同一级别,即:

    • Common/Tag_1.0.0签出到名为Common的本地目录中
    • 签出OtherProject/TrunkOtherProject,在Common 旁边

    那么OtherProject可以引用Common中的文件为../Common/<whatever>

    【讨论】:

    • 我们通常将结帐保存在与 SVN 存储库相同的文件夹结构中,不同的人对结帐采取不同的方法 - 大多数人要么对文件夹结构进行基于“更新深度”的结帐,然后再结帐内的单个文件夹。我真的不喜欢使开发所需的文件夹结构与 SVN 不同的想法,它增加了结帐的开销,而且在我看来,它打开了搞砸的大门(不小心将标签签出到错误命名的文件夹并针对错误的代码或其他东西进行构建)......这真的是大多数人所做的吗?
    【解决方案3】:

    如果您的所有项目都没有自己的发布周期,即始终同时发布,那么您可以使用

    \trunk
      - Common
      - OtherProject
    \tags
      \ Tag_1.0.0
           - Common
           - OtherProject
    

    【讨论】:

    • 不幸的是,它们并非都在一个发布时间表上——我们有很多不同的项目按自己的时间表发布,其中有很多不同的相互依赖关系,引用了其他项目的各种标签(没有通知至少依赖)
    猜你喜欢
    • 2012-03-24
    • 1970-01-01
    • 2016-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-21
    • 2012-01-20
    相关资源
    最近更新 更多