visual-studio - 不同项目中不同svn仓库的代码管理

标签 visual-studio svn

首先我想告诉你我有什么样的系统,我想建立在什么样的系统上。

1- A Solution (has)
   a- Shared Class Library project (which is for lots of different solutions)
   b- Another Class Library project (which is only for this solution)
   c- Web Application project (which main part of this solution)
   d- Shared Web Service project (which also serves for different solutions)

2- B Solution (has)
   a- Shared Class Library project (which is for lots of different solutions)
   c- Windows Form Application project (which is main part of this solution)
   d- Web Service project (which also serves for different solutions)

和其他类似的项目......

我使用 xp-dev.com 作为我们的 svn 存储库服务器。我为这些项目打开了不同的项目( 共享类库、Web 服务项目、Windows 窗体应用程序项目、Web 应用程序项目、另一个类库项目 )。

我当然想对所有这些项目进行版本控制。

我的第一个问题 是,我应该将每个项目(一个解决方案)放到一个 svn 存储库中,以便稍后获取它们的修订号?

或者我应该将它们每个放入不同的 svn 存储库并保留(记下)用于发布/部署每个解决方案的正确版本号?
alt text

如果我为每个项目(共享类库、Web 应用程序、共享 Web 服务...)使用一个 svn,我如何在真正的解决方案中关联正确的 svn 地址和 VS.2010 版本?
alt text

那么,您如何管理您的存储库和项目?

最佳答案

您可以采取的另一种方法是使用 Subversion externals属性,以便能够在单独的存储库或单个存储库中管理您的代码。优点是当您需要解决方案中共享代码的新版本时,您可以简单地更新有问题的 URL。

Note: I don't remember jack about the Visual Studio solution and project organization; it's been at least 5 years since I've done any Windows development. That being said, this discussion is applicable no matter what the file/directory layout is. I'm going to make one up and please just adjust it to your actual situation.



假设您有一个包含所有相关项目的大型存储库。如果您认为这不一定具有可扩展性,我建议您查看 Apache projects SVN setup ;他们在一个存储库中拥有所有项目。从 ASF 中获取一个页面,让我们从存储库结构开始,如下所示:
/SolutionA/trunk
/SolutionA/tags
/SolutionA/branches

/SolutionB/trunk
/SolutionB/tags
/SolutionB/branches

/SharedClassLib/trunk
/SharedClassLib/tags
/SharedClassLib/branches

/SharedWebService/trunk
/SharedWebService/tags
/SharedWebService/branches

到目前为止,这只是一个标准的 SVN 布局;每个或多或少的独立实体都有自己的存储库区域可供使用。现在,让我们假设您一直在 SharedClassLib 上进行开发,并且您的版本最高为 2.0.0,而在 SharedWebService 上,您的版本为 1.2.5。目录布局将类似于:
/SharedClassLib/tags/1.0.0
/SharedClassLib/tags/1.5.0
/SharedClassLib/tags/2.0.0

/SharedWebService/tags/1.0.0
/SharedWebService/tags/1.2.0
/SharedWebService/tags/1.2.5

其他标签只是为了说明这样一个事实,即您的开发一直在进行,并且您已经发布了多个版本。

现在,回到 SolutionA,您有一个 LocalClassLibrary 项目和一个 LocalWebApp 项目。这些项目严格属于此解决方案的一部分,不会在此解决方案之外共享。尝试一下目录布局,您的主干可能看起来像:
/SolutionA/trunk/SolutionA/<some_solution_level_files>
/SolutionA/trunk/SolutionA/LocalClassLibrary/<some_project_level_files>
/SolutionA/trunk/SolutionA/LocalWebApp/<some_project_level_files>

那么,我们的问题是,我们如何将 SharedClassLib 和 SharedWebService 引入到我们的 SolutionA 中?通过使用 Subversion 外部组件。阅读 externals首先网页,然后回到这里。

为了让您的生活更轻松,如果您是从命令行执行此操作,我建议您在解决方案目录中创建一个 svn.externals 文件来设置 svn:externals 属性。如果您正在使用其他工具,请记住,在这种情况下,您将需要添加多行。该文件将如下所示:
SharedClassLib         http://your.svn.server/SharedClassLib/tags/2.0.0
SharedWebService       http://your.svn.server/SharedWebService/tags/1.2.5

编辑 1 : 此时,可以看到您所指的 URL 是完全限定的。这意味着它们可以是单独的存储库,您不必使用我在此处描述的布局。此外,如果您处于开发的中间阶段,并且需要共享代码的最新、最前沿的开发版本,请使用类似 http://your.svn.server/SharedClassLib/trunk 的 URL。 .但是,在某些时候,您会想要在标记和发布解决方案之前确定外部代码的 sable 版本。

编辑 2 : 请注意,这是 1.5 之前的 svn 语法。它在 1.5 中发生了一些变化

做一个 svn propset svn:externals -F svn.externals .在您的解决方案目录中,然后 svn commit && svn update .此时 svn 将使用这些 URL 的内容填充您的工作副本。您的工作副本将类似于:
./SolutionA/svn.externals
./SolutionA/<some_solution_level_files>
./SolutionA/LocalClassLibrary/<some_project_level_files>
./SolutionA/LocalWebApp/<some_project_level_files>
./SolutionA/SharedClassLibrary/<some_project_level_files>
./SolutionA/SharedWebApp/<some_project_level_files>

当您需要引入新版本的共享项目时,请适当更新 svn:externals 属性。请注意,这种方法有一些注意事项,在 SVN 外部文档中有详细说明。主要是,不要计划能够在 ./SolutionA/SharedClassLibrary 中进行更改,并期望在您在 SolutionA 中进行提交时会神奇地获取这些更改。

现在您已准备好向全世界发布 SolutionA。只需将主干的适当标签(svn copy)创建到标签目录:
/SolutionA/tags/1.0.0

现在,您的 SolutionA 将拥有自己的正确标记/版本的代码,并且您正在为该版本使用正确版本的共享项目。

显然,同样的讨论适用于解决方案 B。

我有一段时间没有与 SVN 一起工作了,所以如果我上面的任何一个有点错误,我很抱歉。

关于visual-studio - 不同项目中不同svn仓库的代码管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4561378/

相关文章:

python - 自动将 SVN 修订号导入程序

git - git存储系统怎么样

c++ - 如何在 cpp 源文件中链接静态库?

c++ - Visual Studio 自动将括号添加到函数名称

c# - 从解决方案中的其他项目访问 MySettings

vb.net - 如何在数组中的某个点之后从列表框中读取文本?

eclipse - 使用 Subclipse 将 Eclipse 项目重新连接到 SVN

svn - IntelliJ : How to preview differences in incoming changes?

c - 我怎样才能在c中的两个printf之间等待一秒钟?

svn - TortoiseSVN 列出修改后的文件,但它们是相同的