对于存储在源代码控制中的文件,是否有任何方法可以使用svn externals(最好是Subversion,但如果对其他SCM系统可能或更容易,我会感兴趣)。
这就是我的意思。假设我有一大堆SQL脚本,这些脚本必须合并为一个大脚本来打包每个版本。如果我可以为整个脚本创建一个文件然后只是链接到其他文件,那么当subversion中任何引用的文件发生变化时,一些文件将自动更新(在SVN更新之后),这将是很好的。我认为连接文件必须是只读的。
考虑一下这个文件可能会更容易。一个用于模板定义,另一个用于文件本身。
它可能看起来像这样。
模板文件(可能是.sql.svntemplate扩展名或其他内容):
<external file="relative/repository/url/Script1.sql"/>
<external file="relative/repository/url/Script2.sql"/>
<external file="relative/repository/url/Script3.sql"/>
<external file="relative/repository/url/Script4.sql"/>
当然它不一定是XML。
然后当您添加并提交.sql.svntemplate文件时,Subversion将自动生成一个具有相同名称的只读文件,但不包含.svntemplate扩展名。
E.g。
DBScripts.sql.svntemplate
会生成一个名为:
的只读文件DBScripts.sql
将包含所有脚本中的内容。
答案 0 :(得分:3)
您所描述的内容通常称为Derived Object,许多源控制系统都有不同的处理方式。在最常见的情况下,派生对象是在构建阶段中集成新标签期间创建的。常见的其他派生对象是编译的目标文件,归档文件和数据库文件。处理派生对象的源控制系统的示例是IBM Rational ClearCase。
SVN没有很好地处理实现的派生对象。我建议为预提交操作创建一个make文件。所以在 svn checkin 之前运行'make -f Makefile.commit',它会创建/更新所有相关的派生对象。您可以将特定的Makefile放入每个目录,并使它们包含子目录中的makefile,这样只要您提交子树,只需在其目录中运行makefile,它就会更新您修改的整个子树中的衍生对象。您可以向makefile添加规则,以便在生成后将派生对象设置为只读。
在Makefile stategies上看到gnu用户manual。 Make是一个专门设计用于根据源文件修改和依赖关系处理派生对象创建的工具。