SVN项目文件夹树结构vs生产文件夹树结构

时间:2010-06-16 09:31:43

标签: svn project-management directory

在开发PHP + JS Web应用程序时,我们总是尝试将大块代码分成小块模块/组件,以便在其他应用程序中尽可能多地重用这些代码。

我们现在说:

  1. EcommerceApp(电子商务主要应用程序)
  2. 一个Server-file-mgr组件(用于查看/管理服务器上文件的组件)
  3. a Mylib(有用功能库)
  4. 一个MailistApp(另一个处理邮件列表的主要应用程序)
  5. ...

    • EcommerceApp需要Server-file-mgr组件和Mylib才能正常工作
    • Server-file-mgr需要Mylib才能工作
    • MaillistApp同时需要Server-file-mgr组件和Mylib

    我的想法是简单地构建SVN项目文件夹树,将所有内容放在同一级别:

    trunk/EcommerceApp
    trunk/Server-file-mgr
    trunk/Mylib
    trunk/MaillistApp
    

    但在现实生活中,要使这些应用程序正常工作,文件夹树结构必须如下:

    EcommerceApp
     |_ Mylib
     |_ Server-file-mgr
    
    MaillistApp
     |_ Mylib
     |_ Server-file-mgr
    

    我的意思是MylibServer-file-mgr需要在EcommerceApp/MaillistApp文件夹中。

    你将如何构建SVN文件夹,就像我做的那样,或以不同/更好/更聪明的方式构建?

    编辑:somoene在下面的答案中建议将SVN构建为真实文件夹,但我会在SVN上有两个相同文件夹的副本,我的意思是我会有一个trunk / EcommerceApp / Mylib和另一个副本在trunk /下MaillistApp / Mylib,我如何让它们保持同步?

2 个答案:

答案 0 :(得分:4)

我会建议第二个(就像现实一样)。但我建议为MyLib和Server-file-mgr(带有自己的主干/标签/分支)创建单独的“模块”,如果它们在该产品以外的任何地方使用,并使用svn:externals将它们链接在一起。您可以将它们作为单独的库来处理。

编辑:

trunk/
  EcommerceApp
   |_ Mylib
   |_ Server-file-mgr

  MaillistApp
   |_ Mylib
   |_ Server-file-mgr

您可以使用svn:externals执行以下操作:您必须将它们放入Project / trunk文件夹。

Project/
   |_ trunk/
        |_ EcommerceApp (link to MyLib->tags/RELEASE-1.0)
        |_ MaillistApp (link to Server-file-mgr->tags/RELEASE-1.0)
   |_ tags
   |_ branches

MyLib/
   |_ trunk
   |_ tags
       |_ RELEASE-1.0
   |_ branches

Server-file-mgr/
   |_ trunk
   |_ tags
       |_ RELEASE-1.0
   |_ branches

每当您创建MyLib或Server-file-mgr的新版本时,您只需更改Project / trunk中的svn:externals即可。因此,您可以为组件进行单独的开发。

答案 1 :(得分:0)

您可以使用符号链接(如果您使用的是Linux),如果唯一的要求是能够从EcommerceAppMaillistApp目录本地访问它们。 SVN能够正确存储符号链接。

trunk/EcommerceApp
 |-  Mylib -> ../Mylib
 |-  Server-file-mgr -> ../Server-file-mgr
trunk/Server-file-mgr
trunk/Mylib
trunk/MaillistApp
 |-  Mylib -> ../Mylib
 |-  Server-file-mgr -> ../Server-file-mgr