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

SVN项目文件夹树结构与生产文件夹树结构,svn,project-management,directory,Svn,Project Management,Directory,在开发PHP+JS web应用程序时,我们总是尝试将大的代码块分割成小的模块/组件,以便在其他应用程序中尽可能多地重用这些最后的模块/组件 假设我们现在有: 电子商务应用程序是电子商务的主要应用程序 服务器文件管理器组件用于查看/管理服务器上文件的组件 Mylib是一个有用函数库 MailistApp应用另一个主应用程序来处理邮件列表 电子商务应用程序需要服务器文件管理器组件和Mylib才能工作 服务器文件管理器需要Mylib才能工作 MaillistApp也需要服务器文件管理器组件和Myli

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

假设我们现在有:

电子商务应用程序是电子商务的主要应用程序 服务器文件管理器组件用于查看/管理服务器上文件的组件 Mylib是一个有用函数库 MailistApp应用另一个主应用程序来处理邮件列表

电子商务应用程序需要服务器文件管理器组件和Mylib才能工作 服务器文件管理器需要Mylib才能工作 MaillistApp也需要服务器文件管理器组件和Mylib才能工作。 我的想法是简单地构造SVN项目文件夹树,将所有内容放在同一级别:

trunk/EcommerceApp
trunk/Server-file-mgr
trunk/Mylib
trunk/MaillistApp
但在现实生活中,要使这些应用程序正常工作,文件夹树结构必须如下所示:

EcommerceApp
 |_ Mylib
 |_ Server-file-mgr

MaillistApp
 |_ Mylib
 |_ Server-file-mgr
我的意思是Mylib和服务器文件管理器需要位于电子商务App/MaillistApp文件夹中

然后,您将如何像我一样或以不同/更好/更智能的方式构建SVN文件夹


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

我建议第二个用于现实生活中。但我建议为MyLib和Server file mgr创建单独的模块,如果它们在该产品以外的任何地方使用,则使用它们自己的trunk/tags/branchs,并使用svn:externals将它们链接在一起。您可以将它们作为单独的库来处理

编辑:

您可以使用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或服务器文件mgr时,只需更改Project/trunk中的svn:externals即可。因此,有了它,您就可以为您的组件进行单独的开发。

我建议第二个组件用于real live。但我建议为MyLib和Server file mgr创建单独的模块,如果它们在该产品以外的任何地方使用,则使用它们自己的trunk/tags/branchs,并使用svn:externals将它们链接在一起。您可以将它们作为单独的库来处理

编辑:

您可以使用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或服务器文件mgr时,只需更改Project/trunk中的svn:externals即可。因此,您可以为您的组件进行单独的开发。

如果您使用的是linux,那么您可以使用符号链接,如果唯一的要求是能够从EcommerceApp和MaillistApp目录本地访问它们。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

如果您在linux上,并且唯一的要求是能够从电子商务App和MaillistApp目录本地访问它们,那么您可以使用符号链接。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

谢谢,我知道最好每个人都有自己的后备箱,但我不想减少答案。如果我像你建议的那样使用第二个,我会在SVN上有两个相同文件夹的副本,我的意思是我会有一个trunk/EcommerceApp/Mylib,另一个副本在trunk/MaillistApp/Mylib下,我如何使它们保持同步???我谈到了SVN:外部这不是副本!谢谢svn:外部正是我想要的。对于关注这个链接的人,他们提供了一个很好的解释,说明了如何使用svn:externals with Turtoisesvn谢谢,我知道最好让每个人都有自己的主干,但我不想把答案压缩。如果我像你建议的那样使用第二个,我会在SVN上有两个相同文件夹的副本,我的意思是我会有一个trunk/EcommerceApp/Mylib,另一个副本在trunk/MaillistApp/Mylib下,我如何使它们保持同步???我谈到了SVN:外部这不是副本!谢谢svn:外部正是我想要的。对于关注此链接的人,他们提供了一个关于如何使用svn的很好的解释:externals with TortoiseSVN我不在Unix上,我使用没有symbolyc链接的Tortoise svn。我不在Unix上,我使用没有symbolyc链接的Tortoise svn。