【问题标题】:SVN: Best way to share common code across projectsSVN:跨项目共享通用代码的最佳方式
【发布时间】:2009-03-21 17:38:45
【问题描述】:

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

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

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

最好的方法是什么?是否有其他解决方案?

【问题讨论】:

    标签: svn repository branch


    【解决方案1】:

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

    Externals Definitions in the SVN book

    【讨论】:

      【解决方案2】:

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

      例如像

      这样的存储库 回购/站点1 回购/站点2 回购/commonPieces

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

      您显然希望避免任何递归循环。但这样做的好处是所有内容都在同一个存储库中并且可以共享历史记录——您可以使用“svn copy”将越来越常见的内容从站点 1 或站点 2 提取到 commonPieces 中。

      比较我们当前工作的解决方案——将我们的单独项目存储库中的内容迁移到单个also-separate“coreLibraries”存储库会丢失开发历史。由于我们通常为一个项目开发功能,然后决定重用它们,这种历史损失经常发生......


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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 似乎正是我所需要的。将每个项目指向 WordPress 存储库还是将单个公共文件夹指向 WordPress 存储库然后将其他文件夹指向单个公共文件夹会更好吗? (甚至可以这样做,即像那样将它们链接在一起)
        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

          后备箱 - 核 - 消息传递 - 超级强大的应用程序#1 - 超级强大的应用程序#2 - 超级强大的应用#3

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

          【讨论】:

          • @WindyCityEagle,这种方法听起来不对。检查所有项目以处理单个项目并不好。
          • 我自己也一直这么想,所以如果有人有更好的建议,我愿意听。
          【解决方案6】:

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

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

          这有几个优点:

          • 您可以一次试验多个版本的 Wordpress,进行测试等等。您可以在所有网站之间共享这些内容
          • 您不必担心 wordpress 的签出位置。在项目中包含库通常很麻烦,但这种设置可以更轻松地将内容放在某个公共位置。
          • 您不必维护库的多个版本,更新更容易。

          【讨论】:

            【解决方案7】:

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

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

            • 让你的插件分开
            • 不要将 wordpress 本身存储在 SVN 中,除非您使用供应商分支
            • 当您需要获取具有特定组件的特定应用时,请使用构建脚本。

            【讨论】:

              【解决方案8】:

              最好的方法是什么?是否有其他解决方案?

              不要跑题,但我建议你仔细看看git.我们用子模块日复一日地做这种事情,而且轻而易举。 p>

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

              【讨论】:

              • 有趣,你能快速解释一下在你的情况下是什么让 git 更容易吗?
              • 我仔细看看。一个问题是它是否可以与其他 SVN 存储库集成,例如 SVN:external do 这开辟了一个充满可能性的世界。我喜欢 git,因为它承诺性能、占用空间小、分支等
              猜你喜欢
              • 2010-09-07
              • 1970-01-01
              • 1970-01-01
              • 2011-10-16
              • 1970-01-01
              • 2015-04-11
              • 2018-04-03
              • 1970-01-01
              相关资源
              最近更新 更多