我正在尝试创建 svn 分支的逻辑进展,其中较新的分支具有指向前一个分支中的文件的指针,而不是这些文件的副本。一旦您在较新的分支中更改了文件,它将与旧分支中的副本断开连接。(因此,写时复制)实际文件不是源代码,而是文本文件。我正在探索这里的可能性,并希望对此提议的布局提供反馈。
我们从一个典型的颠覆场景开始,在根级别有分支。当我们创建一个新分支时,它将作为最新分支的副本开始生命。例如:
^/branches/1/A
^/branches/1/B
分支 1 现在处于维护模式;分支 2 继续进行新的开发。
svn copy ^/branches/1 ^/branches/2
产量
^/branches/2/A (a copy of ^/branches/1/A)
^/branches/2/B (a copy of ^/branches/1/B)
我想要的是,不是让 A 和 B 成为断开连接的副本,而是让它们成为指针
^/branches/2/A -> ^/branches/1/A
^/branches/2/B -> ^/branches/1/B
因此,分支 2 中的文件 A 无缝地“跟踪”分支 1 中的文件 A。当分支 2 中的文件 A 必须与分支 1 中的文件 A 不同时,我们“断开链接”,创建一个实际的副本文件,然后从那里开始。
根据我的阅读,这可能与 svn:externals 一起实现。而不是 svn copy,我会编写脚本将分支 1 的目录结构复制到分支 2,然后对于每个包含文件的目录,在该目录上创建一个 svn:externals 属性,其中包含指向前一个分支的文件的 URL。
这是我的问题/问题:
我希望不可能从分支/2/A 中的 svn:externals 副本更改分支/1/A。我相信这只有通过将 svn:externals 定义与修订联系起来才有可能,这违背了整个目的。有没有类似 svn:readonly 的东西?(不是我能找到的)
svn:externals 定义不是递归的。换句话说, ^/branches/3/A -> ^/branches/2/A (它本身指向) -> ^/branches/1/A 是不可能的。当有 3 个分支时,3 和 2 必须都明确指向分支 1。
我想要完成的主要事情是,一旦在某个分支中创建了文件,进一步的分支总是会自动更改该文件。这些文件的维护者必须采取一些明确的行动才能“破坏该链接”
有没有更好的方法来设置它?