Svn 从CVS(NT)迁移到Subversion:What';(虚拟)模块的等价物是什么?
我们目前正在考虑从CVSNT转移到Subversion(因为我们已经在使用trac,它为SVN集成做好了充分的准备)。由于我们已经相当广泛地使用了一些不太常见的CVS(NT)特性,所以很早就出现了几个问题。这只是第一次 以下是场景: (对于不耐烦的人:我的实际问题在这篇文章的最底部,在水平尺下面。) 我们所有的“项目”都有一些共同的代码。CVS存储库中的目录层次结构看起来有点像这样(简化-希望不会太简单):Svn 从CVS(NT)迁移到Subversion:What';(虚拟)模块的等价物是什么?,svn,migration,cvs,module,Svn,Migration,Cvs,Module,我们目前正在考虑从CVSNT转移到Subversion(因为我们已经在使用trac,它为SVN集成做好了充分的准备)。由于我们已经相当广泛地使用了一些不太常见的CVS(NT)特性,所以很早就出现了几个问题。这只是第一次 以下是场景: (对于不耐烦的人:我的实际问题在这篇文章的最底部,在水平尺下面。) 我们所有的“项目”都有一些共同的代码。CVS存储库中的目录层次结构看起来有点像这样(简化-希望不会太简单): 自由基 Lib1 Lib2 外部的 ExtLib1 文件 来源 ExtLib
- 自由基
- Lib1
- Lib2
- 外部的
- ExtLib1
- 文件
- 来源
- ExtLib2
- 文件
- 来源
- ExtLib1
- 项目A
- 项目B
CVSROOT/modules
文件对此进行建模,如下所示:
ExtLib1Full -d Lib/ExtLib1Full External/ExtLib1
ExtLib1Src -d Lib/ExtLib1/Source External/ExtLib1/Source
ExtLib2Full -d Lib/ExtLib2Full External/ExtLib2
ExtLib2Src -d Lib/ExtLib2/Source External/ExtLib2/Source
Lib1 -d Lib/Lib1 Libs/Lib1
Lib1_WDeps -a ExtLib1Src Lib1
Lib2 -d Lib/Lib2 Libs/Lib2
Lib2_WDeps -a Lib2
ProjectAMain -a ProjectA
ProjectALibs -a Lib1_WDeps Lib2_WDeps ExtLib2
ProjectAFull -a ProjectAMain ProjectALibs
ProjectALibs_OursOnly -a Lib1 Lib2
ProjectAFull_OursOnly -a ProjectAMain ProjectALibs_OursOnly
ProjectBMain -a ProjectB
ProjectBLibs -a Lib1_WDeps
ProjectBFull -a ProjectBMain ProjectBLibs
ProjectBLibs_OursOnly -a Lib1
ProjectBFull_OursOnly -a ProjectBMain ProjectBLibs_OursOnly
对于ProjectA的构建,构建服务器现在只需签出名为“ProjectAFull”的虚拟模块,以获取该特定构建所需的所有相互依赖的模块,甚至创建编译器喜欢的目录结构(即,外部和内部Lib都放在公共“Lib”父文件夹下)。同样,当我们想要标记包含所有依赖项的发布时,我们只需使用cvsrtag-rTagName ProjectAFull
。在生成变更日志时,我们将仅使用cvs rlog ProjectAFull
的输出,以避免来自外部库(我们使用cvs import
和供应商分支维护)的提交消息污染变更日志
SVN中是否有这些虚拟模块的等价物?我应该如何在新的SVN存储库中设置目录结构以适应这种情况?每个项目和库是否应成为其自己的SVN项目(即具有自己的“主干”、“标记”和“分支”文件夹集),还是应按原样导入现有目录结构?如何定义依赖项?
我非常希望能够继续执行只会影响相关模块的单步标记/签出/日志操作。如果您正在进行更改,请不要忘记查看。毕竟,未来是美好的 编辑:关于DVC有很多无知,这一点可以从对这一评论的反对票中得到证明,但我支持我的建议,即应该考虑它,因为问题表明正在考虑源代码管理迁移,并且Subversion是一个候选。恐怕这次我得跟船一起沉下去了 我意识到许多svn用户仍然对Linus Torvalds的说法感到恼火,他们说这是有史以来最没有意义的项目(),但撇开侮辱不谈,DVCS的优点已经足够强大,足以让Mercurial等公司采用它。即使是Subversion项目的作者也表示,越来越多的项目无法从dvcs上的Subversion中获益。如果您正在进行更改,请不要忘记查看或查看。毕竟,未来是美好的 编辑:关于DVC有很多无知,这一点可以从对这一评论的反对票中得到证明,但我支持我的建议,即应该考虑它,因为问题表明正在考虑源代码管理迁移,并且Subversion是一个候选。恐怕这次我得跟船一起沉下去了 我意识到许多svn用户仍然对Linus Torvalds的说法感到恼火,他们说这是有史以来最没有意义的项目(),但撇开侮辱不谈,DVCS的优点已经足够强大,足以让Mercurial等公司采用它。即使是Subversion项目的作者也认为,越来越多的项目无法从dvcs上的Subversion中获益。您看过了吗?它们似乎就是你要找的 你看过了吗?它们似乎就是你要找的 您应该看看,但请注意,我不确定我是否了解您在使用CVS做什么,因为我已经多年没有使用过CVS了 基本上,外部引用意味着您可以在项目下创建一个子目录,并将另一个项目签出到该子目录中 基本上,您可以获得以下布局:
ProjectA - svn://server/ProjectA
classes (svn://server/ProjectA/classes)
app (svn://server/ProjectA/app)
externals (svn://server/ProjectA/externals)
Ext1 - svn://server/Ext1
classes (svn://server/Ext1/classes)
Ext2 - svn://server/Ext2
说明:
- svn://... 是我签出的url(svn://...)是该目录的相对url,但它是母项目目录签出的一部分
注意,外部引用作为属性添加到“externals”目录中,并作为ProjectA的一部分提交到存储库中。添加这些属性后,更新或新签出将自动下载Ext1和Ext2,作为正常签出的一部分
但是,这将为您提供工作文件夹中的工作文件夹,您需要提交更改并分别对这些更改进行分支/标记。Subversion不允许您对所有这些工作副本进行修改并在一个步骤中提交它们
换句话说,如果为了向项目添加功能,您更改了ProjectA/类中的一些文件,然后在Ext1/类上添加了一些框架支持,那么您必须执行两个提交,一个用于Ext1,一个用于ProjectA
如果您想要一个实例,下面是我的C#类库的子目录: 要签出该目录,您需要指定用户名和密码,两者都应该是不带引号的“guest” 我的类库单元测试项目中的外部引用既包括“SigningKey”目录(检查主目录中的subversion属性),也包括“libs”子目录的内容(检查li上的subversion属性)