SVN:跨项目共享公共代码的最佳方式

时间:2009-03-21 17:38:45

标签: svn repository branch

我在一个存储库中有多个网站项目,每个存储库都有一个WordPress副本。更新WordPress意味着更新所有项目文件夹并保留冗余副本。这对于同步整个文件夹的rsync脚本非常有用。它还为我提供了完整的网站本地副本。

我可以通过多种方式来改进这一点,并希望得到一些反馈。我在Windows上,最近迁移到Subversion。

  1. 创建每个网站文件夹中WordPress位的符号链接。这将在Subversion和Apache中占据上风。有什么缺点吗?
  2. 拥有一个WordPress文件夹并将其分支到其他网站中继。我读到分支很便宜并且维护了一个副本,但我不确定是否应该跨越中继进行分支。就个人而言,我认为这是最好的方法。有什么理由可以避免这个吗?
  3. 最后,我可以保留当前结构并使用脚本在所有网站文件夹中进行复制。
  4. 什么是最好的方法,还有其他替代解决方案吗?

8 个答案:

答案 0 :(得分:16)

一种选择是将WordPress位分离到一个单独的存储库中(因为它不是您项目的一部分,它只是您用来构建它们的东西),然后使用svn:externals将其提取到您的项目中正确的位置。

Externals Definitions in the SVN book

答案 1 :(得分:7)

如果您已经将所有站点集中在一个存储库中,则可以使用svn:externals以各种方式将同一存储库的不同部分拉到一起。

E.g。使用像

这样的存储库
repo/site1
repo/site2
repo/commonPieces

你可以在site1和site2 dirs上引入一个“svn:externals”属性,上面写着“commonPieces url-to-repo / commonPieces”。

你明白要避免任何递归循环。但这样做的好处是,所有内容都在同一个存储库中并且可以共享历史记录 - 您可以使用“svn copy”将从site1或site2变得更常见的内容拉到commonPieces中。

比较我正在使用的当前解决方案 - 将我们的单独的项目存储库中的内容迁移到单个也是独立的“coreLibraries”存储库中会丢失开发历史记录。由于我们通常为一个项目开发功能然后决定重复使用它们,因此这种历史记录的丢失发生了很多......


编辑:值得记住的是,虽然site1上的“svn update”将自动使用此“svn:externals”属性更新commonPieces,但site1上的“svn commit”将不会显示site1 / commonPieces中已更改的内容。您必须进行两次单独的提交,一次来自site1,另一次来自site1 / commonPieces。

答案 2 :(得分:3)

您可以添加指向svn:externalWordPress repository定义,也可以使用您使用的插件和自定义项创建自己独立的“自定义WordPress存储库”。

答案 3 :(得分:2)

我经常会为不同的项目重复使用相同的类库,在我的情况下,我更喜欢为每个项目分别使用一个 - 冻结 - 副本。唯一的原因是我不想打破我暂时没有工作的项目,以防其中一个库过时了。但是,如果每个项目都是某个主要项目的一部分,那么你就会不断努力。

答案 4 :(得分:1)

也许我只是以错误的方式使用Subversion,但我们的文件夹结构如下所示

中继线     - 核心     - 消息     - 超强功能应用#1     - 超强功能应用#2     - 超强功能应用#3

因此,我们所有的应用程序共享相同的Core和Messaging组件。唯一的缺点是,当人们分支时,他们会得到所有的应用程序,但这比任何事情更令人烦恼。

答案 5 :(得分:1)

更好的方法是将wordpress拉出到存储库的单独分支中。然后,为每个存储Wordpress路径的网站引入配置文件。您可以将此位置附加到php include路径。这是一个图表:

Svn repo-v
         |-Websites--v
         |           |---One
         |           |---Two
         |-Wordpress-v
                     |---branch one
                     |---branch two

这有几个好处:

  • 您可以同时试用几个版本的Wordpress,进行测试和什么不做。您可以在所有网站之间分享这些内容
  • 您不必担心wordpress的签到地点。在项目中包含一个库通常很麻烦,但这种类型的设置使得将东西放在一些公共位置更容易。
  • 您不必维护库的多个版本,更新更容易。

答案 6 :(得分:0)

传统上一切都应该在SVN上分开。听起来你正在使用SVN作为从不同区域获取代码并将它们拼接在一起的手段。

所以你使用SVN作为构建工具。最好是:

  • 保持插件分开
  • 除非您使用供应商分支
  • ,否则不要在Word中存储wordpress本身
  • 当您需要使用特定组件获取特定应用时,请使用构建脚本。

答案 7 :(得分:0)

  

什么是最好的方法,还有其他替代解决方案吗?

不要偏离主题,但我建议你仔细看看 git. 我们日复一日地用子模块做这种事情,这是一件轻而易举的事。

仅供参考 - 由于这类问题,大约2年前从SVN迁移过来。