一些注释

一些注释

如何在 SVN 系统中组织分支?由于我使用 Windows,因此我使用 TortoiseSVN。

目前我有这种文件/目录结构。虽然我不清楚这种管理系统的工作原理,但我有点习惯于管理编号版本。

program_main\trunk\corefile.php
program_main\tags\1.0\corefile.php
program_main\tags\1.1\corefile.php
program_main\tags\1.2\corefile.php

现在我想在此基础上制作另一个程序。它将是一个单独的程序,但它使用主程序作为基础。如果主程序更新,扩展修改后的程序也会更新相应的版本号。

program_mod\trunk\corefile.php
program_mod\trunk\additionlalfile.php
program_mod\tags\1.0\corefile.php
program_mod\tags\1.0\additionalfile.php
program_mod\tags\1.1\corefile.php
program_mod\tags\1.1\additionalfile.php
program_mod\tags\1.2\corefile.php
program_mod\tags\1.2\additionalfile.php

当我右键单击主程序的主干文件夹并选择TortoiseSVN -> Branch/Tag并指定路径时/program_main/branches/program_mod/1.0,它会尝试将文件上传到公共服务器上主项目目录下的分支文件夹。主项目目录是公开的,每个人都可以看到,我不想在该服务器上上传修改后的(分支)版本。

在这种情况下,我该怎么办?我想这一定是一个非常简单的操作,使用合并命令或者别的什么。

感谢您的建议和信息。

答案1

一些注释

  • 存储库树组织、Subversion 存储库内不同节点的功能只是约定、“最佳实践”和习惯的问题,并且与工作风格严格相关,未使用客户端工具用于访问存储库。即“使用 TortoiseSVN”是与您的任务无关的信息(相同的/发现并满意/技术将|可在任何操作系统上与任何 svn 客户端一起使用)

  • 你的业务任务必须定义为(从我的角度来看,更好、更正确)不是“如何使用分支”,而是“如何在 Subversion SCM 后端的情况下存储和链接相关项目”,其中使用分支(或 repo 内的任何其他层次结构)只是一种选择,而不是最佳(IMNSHO)选择

解决方案

Subversion 外部组件

SVN 存储库的任何部分,必须克隆到任何其他位置(以及将来保存的克隆和原始之间的关系),都可以使用svn:外部l 技巧。这样,我们将向存储库添加“虚拟树”,它存在于某个地方,但可以作为签出 WC 的一部分出现在我们的存储库

带有外部插件的 Repo 浏览器

(在此图中,主干目录位于独立存储库的外部)

您当前的 program_mod 平面结构

目录/B

核心文件.php

附加文件.php

对 Subversion 的版本施加限制(在客户端和服务器端),因为 file-externals 仅在 Subversion 1.6 中添加,对于 directory-externals

目录/B/S

z:\mod\附加文件.php

z:\mod\核心

z:\mod\Core\corefile.php

早期版本也可以使用。在将核心项目扩展为多文件项目的情况下,后一种选择在可控性方面还有一个优势:对于基于文件的外部文件,您必须手动添加每个新文件,目录外部文件将包含外部对象内的所有文件

分支与合并

另一方面,您可以使用分支合并方法来维护program_mod

将核心源 (/trunk) 分支到一些,任何存储库内的单独节点(branches/program_mod,fe)。将 additionalfile.php 添加到此分支。每次 trunk 提交 /better/ 后或在 program_mod 发布 /worse/ 之前将 trunk 合并到 program_mod 分支(或svn copy corefile在提交后挂钩中 - TBT!)

相关内容