多个Git存储库

时间:2011-08-03 03:11:36

标签: git grails repository

我们计划在我们的项目中使用Git,这是一个grails应用程序在框架上有多个组件。我们计划将框架和每个组件保存在一个单独的存储库中。因此,根据客户要求,我们可以混合和匹配组件。组件不能单独运行它取决于框架。

采用以下示例,其中A和B是组件,F是框架,

     F
   /  \
  A    B

因此,当我们想要对组件进行一些更改时,我们需要获取组件A,它应该自动获取F(框架)。当我们对框架和组件进行更改时,这些更改都应该转到相应的存储库。

我查看了子模块,但grails应用程序中遵循的目录结构不适用。应用程序文件如下所示,

Component
    + grails-app
       + conf                 ---> location of configuration artifacts 
           + hibernate        ---> optional hibernate config
           + spring           ---> optional spring config
       + controllers          ---> location of controller artifacts
       + domain               ---> location of domain classes
       + i18n                 ---> location of message bundles for i18n
       + services             ---> location of services
       + taglib               ---> location of tag libraries
       + util                 ---> location of special utility classes 
       + views                ---> location of views
           + layouts          ---> location of layouts

此目录结构后跟所有组件和框架。作为主要项目的框架有更多的文件如下,

Framework
    + grails-app
       + conf                 ---> location of configuration artifacts 
           + hibernate        ---> optional hibernate config
           + spring           ---> optional spring config
       + controllers          ---> location of controller artifacts
       + domain               ---> location of domain classes
       + i18n                 ---> location of message bundles for i18n
       + services             ---> location of services
       + taglib               ---> location of tag libraries
       + util                 ---> location of special utility classes 
       + views                ---> location of views
           + layouts          ---> location of layouts
   + lib
   + scripts                  ---> scripts
   + src
       + groovy               ---> optional; location for Groovy source files
                                   (of types other than those in grails-app/*)
       + java                 ---> optional; location for Java source files
   + test                     ---> generated test classes
   + web-app
       + WEB-INF

因此,组件文件夹结构和文件合并在一起以运行应用程序。

请提出解决此问题的方法。

3 个答案:

答案 0 :(得分:4)

看看git submodule

答案 1 :(得分:2)

这是git submodules的用途。

答案 2 :(得分:0)

关于您可以做的最好的事情是使用一个巨大的存储库。这不是很好,绝对不是git的标准做法,但确实满足您的要求。

  • 从新的存储库开始,例如~/main。为此,提交一些基本文件,可能是README,或者一个空的grails-app文件夹,或类似文件。
  • 创建一个分支,然后将框架提交给它。您现在有两个分支,几乎为空masterframework分支。
  • 为每个组件创建一个关闭master的新分支。这些组件的任何开发都需要在这些分支上进行(或者需要对其历史进行修改以使其看起来像是这样)。
  • 每个新项目(~/project1~/project2等)将克隆此存储库并使用master分支来开发主项目。据推测,前几次提交将是git merge frameworkgit merge component-x之类的命令,以便将项目的所有要求都纳入master
  • component-x的任何改进都需要提交到component-x分支。这样可以将改进推送回主存储库,然后从那里转移到其他项目中并合并到他们的master分支中。

同样,这主要是hackery,如果可能的话,使用子模块会更好。但似乎grails并不真的想要很好地发挥它。