版本控制中的项目结构-特定于.NET
这篇文章类似于这个以前问过的问题。我确实想以TTB格式设置SVN存储库,但是在Visual Studio 2008(ASP.NET/VB.NET)中创建项目时,考虑到解决方案文件,项目文件,项目,解决方案中的多个项目等。是否有人拥有脚本或者过程来采用新创建的ASP.NET项目并将其尽可能轻松地转换为TTB格式?
让我更具体一点。假设我正在创建一个名为StackOverflowIsAwesome的项目。我可以将其放入本地文件夹结构中(假设它是c:\ working)。当我创建它时,VS会创建c:\ working \ StackOverflowIsAwesome和一堆子文件夹(bin,app_data等)。但是我希望我的存储库结构看起来像...
StackOverflowIsAwesome /trunk /bin /app_data /tags /branches
因此,是否有一种保持一致的干净方法,还是我需要不断移动/修改文件和文件夹才能完成此工作?
解决方案
如果TTB是通用的而不是每个项目,那么就没有问题了。还是我错过了什么?
我们采用了一种非常简单的方法:
档案结构:
- 项目文件夹2
- 引用(包含解决方案的共享程序集)。
然后,我们只需将整个解决方案文件夹的内容检查到我们的存储库中即可。我们为每个解决方案使用一个存储库。我不确定这是否是组织解决方案的最佳方法,但这对我们有用。
另外,我们在最高级别分支,而不是每个项目。
我们可以查看此先前的帖子或者该项目。该项目创建一个.NET开发树结构(需要.NET 3.5)。
当处理组成一个Visual Studio解决方案的多个项目时,很难决定如何正确构造事物。
我们需要对结构进行处理的一个关键方面是,可以轻松地检索特定版本的所有文件。重要的是要使其尽可能容易。在Subversion中,将根文件夹复制到标签分支更容易,然后记住对X项目重复相同的操作。
能够在主干之外长时间工作也很重要。我们也必须考虑这一点。
我们可能会发现软件具有许多自然地组合在一起的组件。你可以做这样的事情
/tag /core_library /branch /main /business_logic /branch /main /report_library /branch /main /my_ui /branch /main
没有简单的答案。工作确实取决于特定项目。如果一切仍然混乱不堪,那么我们可能需要查看项目的设计方式,看看是否可以更改以提高理解度。
我这样做:
- 在VS中创建项目
- 将项目文件夹中的所有内容导入到repos / projectname / trunk
- 添加回购/分支和回购/标签文件夹
这给了我一个类似的存储库结构:
projectname / trunk /bin /obj /Properties projectname.sln /tags /branches
而且我可以将所有文件保留在文件系统的默认位置。
其他方式:
StackOverflowIsAwesome /trunk /database /datafiles /documents /build /installer /lib /External_DAL (external that points to shared library) /utilities /vendor /src /StackOverFlowIsAwesome /StackOverFlowIsAwesome.csprj /bin /... /StackOverFlowIsAwesomeTests /StackOverFlowIsAwesomeTests.csprj /bin /... /branches /tags
这将适用于每个项目。由于我们使用的是构建脚本,因此我们不需要将解决方案文件存储在SVN中。
对于较大的项目,我们通常在此使用以下格式:
/Project /trunk /lib/ # Binary imports here (not in svn) /src # Solution file here /Libraries # Library assemblies here /StackOverflowIsAwesome.Common /Products # Delivered products here /StackOverflowIsAwesome.Site /Projects # internal assemblies here /StackOverflowIsAwesome.Tests /branches /1.x /tags /StackOverflowIsAwesome-1.0
根据实际项目,非源文件(文档等)具有
主干根目录下的目录和其他开发资源在src下。
下的独立项目位于其自己的/ Project根目录下,但位于同一存储库中。