3

我正在将 Visual SourceSafe 代码存储库迁移到 Subversion,但遇到了问题。

这是我们当前源代码树的简化布局(在 VSS 中):

project_root\
  |-libs\
  |-tools\
  |-arch_1\
  |   |-include
  |   |-source
  |-arch_2\
      |-include
      |-source

我的问题在我们的两个arch_文件夹中。每个arch_文件夹将针对不同的硬件架构构建,但两个文件夹的内容实际上是相同的。中的文件arch_2只是 中的文件的 VSS 链接arch_1,只有少数例外。工作通常签入和签出arch_1文件夹,VSS 链接确保此处签入的任何代码也在arch_2文件夹中更新。

转到 Subversion,是否有任何行为类似于 VSS 的链接?也就是说,有没有办法让两个文件在不同的文件夹中神奇地相互关联,这样它们总是相互同步(对一个文件的更改也会影响另一个文件)?

注意:我知道这里的正确答案是修复构建系统。这个项目的构建系统大约是在十年前拼凑起来的,那时我们的编译器/构建系统还不够智能,无法为两个不同架构编译包含源代码的同一个文件夹。感谢make和更新的编译器,我们可以重新编写构建系统来消除对两个并行源文件夹的依赖。但是,这将需要我们目前没有的时间(我们正在失去对 VSS 服务器的许可,并被迫在相当短的时间内进行迁移)。我希望找到解决此问题的 Subversion 解决方案,因为目前,我们的时间花在使迁移顺利进行比重新编写构建系统(这是我的待办事项列表中的下一个!)上要好得多。

感谢您的帮助!

澄清:我之前研究过使用外部定义,据我所知,它们只能在目录级别使用。我正在寻找在文件级别上运行的东西,因为我们的一些目录混合了共享/链接文件和非链接的特定于体系结构的文件。

4

4 回答 4

2

您可以在arch_2 中添加 arch_1 的内容作为SVN External

更新

从 SVN 1.6 开始支持文件外部

外部文件

从 Subversion 1.6 开始,您可以使用与文件夹相同的语法将单个文件外部添加到工作副本中。但是,有一些限制。

外部文件的路径必须将文件放在现有的版本化文件夹中。一般来说,将文件直接放在设置了 svn:externals 的文件夹中是最有意义的,但如果需要,它可以放在版本化的子文件夹中。相比之下,外部目录将根据需要自动创建任何中间未版本化文件夹。

外部文件的 URL 必须与将插入外部文件的 URL 位于同一存储库中;不支持跨存储库文件外部。

另请参阅:SVN 1.6 发行说明

于 2010-03-08T21:32:56.007 回答
2

我之前研究过使用外部定义,据我所知,它们只能在目录级别使用。

再看一遍。Subversion 1.6 支持文件级外部: http ://subversion.apache.org/docs/release-notes/1.6.html#file-externals

于 2010-03-08T21:45:49.893 回答
0

是的,至少对于目录有一种方法可以做到这一点。该功能称为外部http://svnbook.red-bean.com/en/1.0/ch07s03.html自从我使用 Visual Studio 以来已经有一段时间了,但即使早在 10 年前,VSS 链接仍然比 SVN 外部工作得更好. 然而,SVN 外部是功能性的。您通常最好将您的项目组织到库中(基本目录中的公共代码),然后您可以让项目使用库的外部,而不是让一个项目在另一个项目子目录之外。最终 SVN 将有外部文件和目录http://subversion.tigris.org/issues/show_bug.cgi?id=937

于 2010-03-08T21:33:24.733 回答
0

在 SVN 中最接近这一点的是使用Externals

外部定义允许您:

不同的子目录来自存储库中的不同位置,或者可能完全来自不同的存储库。

于 2010-03-08T21:33:55.187 回答