9

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

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

  1. 在每个网站文件夹中创建指向 WordPress 位的符号链接。这会在 Subversion 和 Apache 中得到支持吗?有什么缺点吗?
  2. 拥有一个 WordPress 文件夹并将其分支到其他网站主干。我读到分支很便宜,并且维护一个副本,但我不确定是否应该跨主干进行分支。就个人而言,我认为这是最好的方法。有什么理由避免这种情况吗?
  3. 最后,我可以保留当前结构并使用脚本在所有网站文件夹中进行复制。

最好的方法是什么,是否有任何替代解决方案?

4

8 回答 8

18

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

SVN 书中的外部定义

于 2009-03-21T17:45:13.730 回答
7

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

例如,使用类似的存储库

回购/站点1
回购/站点2
回购/commonPieces

您可以在 site1 和 site2 目录中引入一个“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。

于 2009-03-21T17:57:09.490 回答
3

您可以添加一个指向WordPress 存储库的svn:external定义,或者使用您使用的插件和自定义创建自己的单独“自定义 WordPress 存储库”。

于 2009-03-21T17:45:57.007 回答
2

我经常会为不同的项目重用相同的类库,在我的情况下,我更喜欢为每个项目提供一个单独的 - 冻结 - 副本。唯一的原因是我不想破坏我有一段时间没有从事过的项目,以防其中一个库过时了。但是,如果每个项目都是某种主要项目的一部分,那么您一直在致力于它是不同的。

于 2009-03-21T17:47:16.660 回答
1

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

主干 - 核心 - 消息 - 超级强大的应用程序 #1 - 超级强大的应用程序 #2 - 超级强大的应用程序 #3

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

于 2009-03-21T17:46:08.597 回答
1

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

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

这有几个优点:

  • 您可以一次试验多个版本的 Wordpress,进行测试等等。您可以在所有网站之间共享这些
  • 您不必担心 wordpress 在哪里签出。在项目中包含一个库通常很麻烦,但是这种类型的设置可以更容易地将东西放在某个公共位置。
  • 您不必维护库的多个版本,更新更容易。
于 2009-03-21T17:49:36.280 回答
0

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

因此,您使用 SVN 作为构建工具。最好:

  • 保持你的插件分开
  • 不要将 wordpress 本身存储在 SVN 中,除非您使用供应商分支
  • 当您需要获取具有特定组件的特定应用程序时,请使用构建脚本。
于 2009-03-21T17:51:56.913 回答
0

最好的方法是什么,是否有任何替代解决方案?

不要跑题,但我建议你仔细看看git。我们用子模块日复一日地做这种事情,这很容易。

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

于 2009-03-21T18:00:25.300 回答