我们使用标准的trunk / branches / tags结构在SVN中存储了一个主视觉工作室项目。但是,这个项目引用了这个结构之外的外部项目,因此当我们创建一个代码分支时,所有对exteranl项目的引用都会失败,因为它们是一个级别。
即。 trunk / MyProjectCode在分支后成为branches / MyFeatureBranch / MyProjectCode,因此,由于这种额外的层次结构,对外部项目的任何引用都会失败。
尽可能少地创建分支的最佳方法是什么?我可以编写一个修改所有项目引用的脚本,或者我可以更改我的本地代码布局,因此分支实际上是从主干向下的级别,因此新分支将在同一级别上。还有其他建议/最佳做法吗?
答案 0 :(得分:3)
从Subversion签出时,您的工作目录不必反映与存储库中相同的目录深度。出于示例目的使用命令行:
svn co svn://server/project/trunk project svn co svn://server/project/branches/MyFeatureBranch project-feature
这样,你就会有两个名为project
和project-feature
的目录。这应该避免不同目录深度和相对路径引用的问题。
答案 1 :(得分:1)
我们分支与该产品相关的所有内容。因此,如果有5个项目是其中的一部分,我们将分支所有5个项目,以确保我们拥有该分支将使用的完整副本。如果您遇到路径问题,可能需要查看名为Junction的程序。
答案 2 :(得分:0)
我过去所做的是,对于开发许多项目和许多常见引用的开发商来说,是将外部引用保存在共享位置。这可能是网络共享,也可能是每个人在硬盘上都有的约定(绝对)位置(结构类似于C:\ SharedLibs \ Library \ Version)。我们将sharedlib保存在一个单独的svn存储库中,每个人都必须检查到该SharedLibs文件夹,并设置我们对这个绝对路径的引用。
我应用的另一个策略是你在许多开源项目中也能找到的:只需将引用存储在项目中。例如。你可以有一个包含子文件夹src(用于源代码)和lib(用于外部引用)的主干。这可能是更好的做法:构建项目(无论是主干还是分支)所需要做的就是检查并运行构建工具。
另一种选择是使用svn:externals属性。使用此属性,您可以确保来自存储库(或其他存储库)中其他位置的文件与项目一起签出。根据经验,我不推荐这个,但它是一个选项。在svn书中阅读:http://svnbook.red-bean.com/en/1.5/svn.advanced.externals.html
答案 3 :(得分:0)
我们在这里遇到了同样的问题,我想过编辑.sln和.csproj文件会用绝对路径替换相对路径。我有点担心这样做,因为VS维护这些文件,以及什么阻止它撤消这个并在将来某些时候恢复到相对路径(例如当Dev保存项目并检查它时)。 / p>
今天早上我上下班的时候有一个“清晰的时刻”:即使我们将分店存放在一个专门的分支机构文件夹中,为什么我要把它分成一个?
所以,而不是:
C:
|_ svnworkarea
|_ project
|_ branches
|_ project-feature
|_ source etc
|_ trunk
|_ source etc
我现在有:
C:
|_ svnworkarea
|_ project
|_ project-feature
|_ source etc
|_ trunk
|_ source etc
由于源文件夹现在处于同一级别,因此相对路径有效,并且引用按预期加载。主干仍然是完全独立的,易于识别,而项目特征由有意义的文件夹名称标识,例如, NewUIBranch。