4

我在Drupal中开发一个网站,我的开发目录树如下:

modules
    -->moduleA
        -->moduleA.inc
        -->moduleA.info
        -->moduleA.php
    -->moduleB
        -->moduleB.inc
        -->moduleB.info
        -->moduleB.php
themes
    -->themeA
        -->themeA.info
        -->page.tpl.php
    -->themeB
        -->themeB.info
        -->page.tpl.php
ShellScripts
    -->scriptA.sh
    -->scriptB.sh
legacyPerlScripts
    -->script1.pl
    -->script2.pl

没有庞大的开发团队;我正在自己开发所有模块和主题。模块和主题有些独立,每个都有自己的版本号。但是,一些大型任务可能需要升级到多个模块。此外,模块、主题和脚本应该一起部署,例如,将模块 A 的当前版本与模块 B 的旧版本一起使用不是一个好主意,因为模块 B 可能依赖于模块 A 中的新功能.

使用 git 进行修订控制的最佳实践是什么?我看到的选项是:

  1. 将所有内容放在一个大型的单体存储库中。
  2. 为每个模块、主题和脚本目录创建一个单独的存储库。
  3. 使用 git-slave (gits) 为每个模块、主题和脚本目录创建子项目。
  4. 使用 git 子模块
  5. 使用 git 子树

对于这样的 Web 开发项目,这 5 个选项中哪一个最常见?

4

2 回答 2

2

对于紧密耦合的代码,子模块是一个糟糕的解决方案。我们有两个主要项目共享一个子项目,用于两个项目都依赖的数据库迁移。我们使用子模块实现了这一点,对迁移进行更改的步骤如下所示:

  1. 提交对子模块的更改。
  2. 将更改推送到原点。
  3. 备份到您当前所在的超级项目。
  4. 提交并推送新的子模块 ref。
  5. 移动到另一个超级项目的子模块副本。
  6. 从源中提取最新更改。
  7. 备份到那个超级项目。
  8. 提交并推送新的子模块 ref。

最重要的是,您始终需要确保您在所有三个项目的正确分支上。这是一个巨大的痛苦。子模块并不是为这种开发而设计的。我们最终将数据库迁移作为两个主要项目之一的一部分,并且不再共享代码(无论如何它只是为了方便而真正共享)。

我确实研究了子树合并,但它看起来只比子模块好一点。

听起来您真的应该将其保留为一个存储库,并使用分支和标记来管理各种模块的不同版本,特别是如果无论如何这些模块都将部署在一起。

于 2012-04-04T15:28:53.297 回答
2

将它们全部保存在一个存储库中。您已经按目录组织了所有内容。如果有的话,您可能希望为每个客户端单独跟踪工作,这可能涉及对任何目录的更改。

于 2012-04-04T06:20:44.777 回答