我正在将Visual SourceSafe代码存储库迁移到Subversion,我遇到了一个问题。
这是我们当前源代码树的简化布局(在VSS中):
project_root\
|-libs\
|-tools\
|-arch_1\
| |-include
| |-source
|-arch_2\
|-include
|-source
我的问题出在我们的两个arch_
文件夹中。将为不同的硬件体系结构构建每个arch_
文件夹,但这两个文件夹的内容几乎完全相同。 arch_2
中的文件只是arch_1
中文件的VSS链接,只有少数例外情况。通常会将工作签入和签出arch_1
文件夹,并且VSS链接确保此处签入的任何代码也在arch_2
文件夹中更新。
转向Subversion,有什么能表现得像VSS的链接吗?也就是说,有没有办法让两个文件在不同的文件夹中彼此神奇地相关联,这样它们就会始终彼此同步(对一个文件的更改也会影响另一个)?
注意:我知道这里的正确答案是修复构建系统。大约十年前,这个项目的构建系统拼凑在一起,当时我们的编译器/构建系统不够智能,无法为两个不同的体系结构编译完整的源代码文件夹。感谢make
和更新的编译器,我们可以重新编写构建系统,以消除对两个并行源文件夹的依赖性。但是,这需要时间,我们目前还没有(我们正在丢失我们的VSS服务器的许可证,并被迫在相当短的时间内迁移)。我希望找到一个针对这个问题的Subversion解决方案,因为目前,我们花费的时间比重新编写构建系统(这是我的待办事项列表中的下一个)要好得多。#/ p>
感谢您的帮助!
澄清:之前我已经研究过使用外部定义,从我可以看出它们只能在目录级别使用。我正在寻找在文件级别上运行的东西,因为我们的一些目录混合了共享/链接文件和非链接的,特定于体系结构的文件。
答案 0 :(得分:2)
您可以将arch_1的内容添加为arch_2中的SVN External
<强>更新强>:
File externals are support as of SVN 1.6
外部文件
从Subversion 1.6开始,您可以添加 单个文件外部到您的工作 使用与for相同的语法进行复制 文件夹。但是,有一些 限制。
外部文件的路径必须 将文件放在现有文件中 版本化文件夹。一般来说它是 最直接放置文件的意义 在具有svn:externals的文件夹中 设置,但它可以在版本中 子文件夹,如有必要。相比之下, 目录外部将自动 创建任何中间无版本 文件夹根据需要。
外部文件的URL必须在 与URL相同的存储库 将插入外部文件 成;存储库间文件外部 不受支持。
答案 1 :(得分:2)
之前我已经研究过使用外部定义,从我可以看出它们只能在目录级别上使用。
再看一遍。 Subversion 1.6支持文件级外部: http://subversion.apache.org/docs/release-notes/1.6.html#file-externals
答案 2 :(得分:0)
是的,有一种方法可以至少对目录这样做。这个功能被称为外部http://svnbook.red-bean.com/en/1.0/ch07s03.html已经有一段时间了,因为我已经使用了视觉工作室,但即使回到10年前,VSS链接仍然比SVN外部更好。然而,SVN外部功能正常。您通常最好将项目组织到库中(基本目录中的公共代码),然后您可以让项目使用外部库,而不是将一个项目外部放到另一个项目子目录中。最终SVN将具有文件的外部以及目录http://subversion.tigris.org/issues/show_bug.cgi?id=937
答案 3 :(得分:0)