2009-02-09 113 views
5

要开始了,我已经看过了以下页面,并不太有我的答案是: how-would-you-organize-a-subversion-repository-for-in-house-software-projectshow-do-you-organize-your-version-control-repository最佳方式

我也看了一下第8章Pragmatic Version Control using Subversion

他们都有很好的意见,但我在它与我的需求很难。

基本上,我想组织的代码,我们的Web服务器。我们有一个$ WEBROOT/htdocs和$ WEBROOT/cgi-bin。在我们的htdocs目录下,我们有用于java脚本和样式表的$ WEBROOT/htdocs/js和$ WEBROOT/htdocs/css。

我们的“项目”都算不上的项目,但小的代码位 - 也许一个Perl脚本,Java脚本文件和样式表。我们可能有一百个左右的小型“项目”几乎都是相互独立的,但都在同一个Web服务器上同一个$ WEBROOT下。

我们的代码是不是在颠覆,但我希望它是 - 我只是有麻烦组织的效率吧。如果需要,我们可以有多个svn存储库,但是如果每个存储库只有3-10个元素,那对我来说似乎是一种浪费。

我认为可以工作的是这样的:如果我编写一个脚本来统计Web服务器上运行的进程(为了举例)。假设我有一个perl脚本,一个js文件和一个css文件。我能说出“项目” webserver_processes,并检查它到仓库为:

/svnrepo/webserver_processes/trunk 

下树干,我可以有:

htdocs/html/webserver_processes 
htdocs/js/webserver_processes 
htdocs/css/webserver_processes 
cgi-bin/webserver_processes 

我没有任何静态html格式的文档在这个“项目“,但如果我这样做,他们会去”html“目录。

我在这个结构中看到的好处是,我可以一次签出一个“项目”,而不会真正影响Web服务器上的其他任何内容。缺点(也许这不是一个真正的缺点)正在部署。我将不得不一次从存储库部署一个项目。我没有看到如何使用这种方法创建一个具有$ WEBROOT/htdocs和$ WEBROOT/cgi-bin结构的工作副本。

另一种选择:

我可以创建一个svn存储库这样的:

/svnrepo/webcode/trunk 

在树干将是我所有的web服务器上的代码,在这两个目录:

htdocs 
cgi-bin 

一个巨大的缺点是,对于一个小代码更改为1个元素,我将不得不签出我的web环境中的每一段代码换货。好处(有点)是我可以在我们的Web服务器上执行一个“svn update”来选择提交到存储库的任何更改。

也许我只是把它做得比它应该更复杂一点,但是没有人对我如何在颠覆中有效地组织我的代码有任何建议吗?

非常感谢提前!

布赖恩

+0

似乎你的两个选项是一样的,除了你已经命名了顶级目录webserver_processes在一个web代码和另一个web代码? – Sol 2009-02-09 18:23:13

+0

第二种选择是我的$ WEBROOT下的所有东西都是颠覆中的单个项目。第一种选择是,我们工作的每个“项目”都是它在Subversion存储库中的自己的项目。 – BrianH 2009-02-09 18:26:02

回答

5

我认为你通过保持你的很多项目单个存储库中作出正确的判罚,所以我只作一个改变你的部署过程:

你的svn回购会是什么样子(你的第一选择。 )

/svnrepo/project1/trunk 
/svnrepo/project1/trunk/htdocs 
/svnrepo/project1/trunk/css 
... 
/svnrepo/project1/branches/branch1 
/svnrepo/project1/tags/blah 
/svnrepo/project2/trunk 
/svnrepo/project3/trunk 

当您想部署使用脚本将文件复制到应该部署的位置时。

通过这种方式,您可以保留一个人为的屏障(文件夹),以便在项目之间组织您的想法,而不仅仅是大量的文件。

编辑:无意中救&增加了清晰度

1

我觉得你最好的选择是第二种选择:具有与htdocs中和的cgi-bin目录下单回购的所有代码。确实,您必须查看所有代码,但只需执行一次,其余更改将会更小。如果是生产服务器,那么显然需要检查您的所有代码是否已准备好生产:保持主干为绿色,可以这么说。

在未来,它可能有助于消除重复功能。

1

其他目录既然你不致力于颠覆然而,考虑使用Bazaar。它特别适合许多小型项目的版本控制,因为它的安装开销很小。

+0

Bazaar看起来不错,但不幸的是我们这里没有python,svn是这里的标准 - 已经有一个svn服务器供我们使用 - 我只是试图让我们的代码进入它。 – BrianH 2009-02-09 18:30:36

1

首先,使用一个存储库。有关单个存储库可以扩展的示例,请参阅Apache svn repository全部是一个存储库。

如果您使用直接部署到Web服务器上的单一中继线,那么您需要确保中继线保持部署就绪。这意味着所有的开发工作都应该首先发生在一个合并后的分支上。您不希望最终出现一个项目只完成一半的情况,而在另一个项目需要在主干中进行错误修复部署。

我不会担心需要人来检查了整个躯干,但如果它是一个真正的问题,那么你可以考虑一种混合的方法:

/svnrepo/trunk/project1/... 
/svnrepo/trunk/project2/... 
/svnrepo/deploy/htdocs 
/svnrepo/deploy/cgi-bin 

在这种情况下,开发商将不得不这样做将其项目中的svn copy从trunk中移动到部署目录中的相应位置。然后您可以在deploy下自动释放所有内容。