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

SVN:跨项目共享通用代码的最佳方式,svn,repository,branch,Svn,Repository,Branch,我在一个存储库中有多个网站项目,每个项目都有WordPress的副本。更新WordPress意味着更新所有项目文件夹并保留冗余副本。这对于同步整个文件夹的rsync脚本非常有用。它还为我提供了该网站的完整本地副本 我有很多方法可以改进这一点,希望得到一些反馈。我在Windows上,最近迁移到Subversion 创建指向每个网站文件夹中WordPress位的符号链接。在Subversion和Apache中,这种情况会持续下去吗。有什么缺点吗 拥有一个WordPress文件夹并将其分支到其他网站。

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

我有很多方法可以改进这一点,希望得到一些反馈。我在Windows上,最近迁移到Subversion

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

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

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


    您可以添加一个指向的定义,或使用插件和自定义设置创建自己的“自定义WordPress存储库”。

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

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


    因此,我们所有的应用程序都共享相同的核心和消息组件。这样做的唯一缺点是,当人们进行分支时,他们会得到所有的应用程序,但这比什么都麻烦。

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

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

    Svn repo-v
             |-Websites--v
             |           |---One
             |           |---Two
             |-Wordpress-v
                         |---branch one
                         |---branch two
    
    这有两个优点:

    • 您可以同时使用多个版本的Wordpress进行试验,以进行测试。您可以在所有网站之间共享这些内容
    • 你不必担心wordpress在哪里签出。在一个项目中包含一个库通常是混乱的,但是这种类型的设置使得把东西放在一些公共位置变得更容易
    • 您不必维护库的多个版本,更新要容易得多

    传统上,一切都应该在SVN上分开。听起来像是在使用SVN从不同区域获取代码并将它们缝合在一起

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

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

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

    例如,使用存储库,如

    repo/site1 repo/site2 repo/commonPieces 回购/网站1 回购/网站2 回购/普通股 您可以在site1和site2目录上引入一个“svn:externals”属性,上面写着“repo/commonPieces的commonPieces url”

    显然,您需要避免任何递归循环。但这样做的好处是,所有内容都在同一个存储库中,并且可以共享历史--您可以使用“svn copy”将越来越常见的内容从site1或site2拉入公共部分

    比较一下我目前工作的解决方案——将内容从单独的项目存储库迁移到单独的“coreLibraries”存储库会丢失开发历史。由于我们通常为一个项目开发特性,然后决定重新使用它们,这种历史损失会发生很多


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

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

    不要离题,但我建议你仔细看看我们每天都在用子模块做这类事情,这是轻而易举的事


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

    似乎正是我需要的。是将每个项目指向WordPress repo更好,还是将单个公用文件夹指向WordPress repo,然后将其他文件夹指向单个公用文件夹更好?(甚至可以这样做,也就是像那样把它们连在一起)@windycityagle,这种方法听起来不正确。检查所有的项目来完成一个项目并不好。事实上,我自己也一直在想同样的事情,所以如果有人有更好的建议,我很乐意听。有趣的是,你能不能快速解释一下,在你的情况下,是什么让git更容易?我正在仔细研究。一个问题是它是否可以与其他SVN存储库(如SVN:external does)集成,这开辟了一个可能性的世界。我喜欢git,因为它承诺性能好、占地面积小、文胸好