在开发PHP + JS Web应用程序时,我们总是尝试将大块代码分成小块模块/组件,以便在其他应用程序中尽可能多地重用这些代码。
我们现在说:
EcommerceApp
(电子商务主要应用程序)Server-file-mgr
组件(用于查看/管理服务器上文件的组件)Mylib
(有用功能库)MailistApp
(另一个处理邮件列表的主要应用程序)...
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
我的意思是Mylib
和Server-file-mgr
需要在EcommerceApp/MaillistApp
文件夹中。
你将如何构建SVN文件夹,就像我做的那样,或以不同/更好/更聪明的方式构建?
编辑:somoene在下面的答案中建议将SVN构建为真实文件夹,但我会在SVN上有两个相同文件夹的副本,我的意思是我会有一个trunk / EcommerceApp / Mylib和另一个副本在trunk /下MaillistApp / Mylib,我如何让它们保持同步?答案 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),如果唯一的要求是能够从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