适当使用git子树/子模块/子项目/从属

时间:2012-04-04 04:17:29

标签: git drupal ubuntu

我正在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子树
  6. 这五个选项中哪一个对于像这样的Web开发项目最常见?

2 个答案:

答案 0 :(得分:2)

将所有内容保存在一个存储库中。您已经按目录组织了所有内容。如果有的话,您可能需要为每个客户端分别跟踪分支工作,这可能涉及对任何目录的更改。

答案 1 :(得分:2)

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

  1. 将更改提交给子模块。
  2. 将更改推送到原点。
  3. 备份您当前所在的超级项目。
  4. 提交并推送新的子模块参考
  5. 转到另一个超级项目的子模块副本。
  6. 从原点中提取最新更改。
  7. 备份 超级项目。
  8. 提交并推送新的子模块参考
  9. 最重要的是,您始终需要确保所有三个项目都在正确的分支上。这是一个巨大的痛苦。子模块不是为了那种开发而制作的。我们最终使数据库迁移成为两个主要项目之一的一部分,并且代码不再被共享(无论如何它只是真正共享)。

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

    听起来你应该把它作为一个存储库并使用分支和标记来管理各种模块的不同版本,特别是如果要将它们全部部署在一起的话。