2011-08-03 153 views
0

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

以下面的例子,其中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 

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

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

+0

你想要的目录布局是什么?你是否在每个组件的子目录中都有框架,或者它是否在组件的同级目录中,或者组件是框架的子目录?这是否能够在这一点上谈判? –

回答

0

关于最好的你可以做的就是使用一个巨大的存储库。这并不漂亮,绝对不是git的标准做法,但可以满足您的要求。

  • 从新存储库开始,比如~/main。为此,提交一些基本文件,可能是自述文件,或空的grails-app文件夹或类似文件。
  • 创建一个分支,然后提交你的框架。你现在有两个分支,几乎是空的master和一个framework分支。
  • 为每个组件创建一个关闭master的新分支。这些组件的任何开发都需要在这些分支上进行(或者需要让它们的历史被破坏,以便看起来像是这样)。
  • 每个新项目(~/project1,~/project2等)都将克隆这个存储库并使用master分支来开发主项目。大概前几个提交将是像git merge frameworkgit merge component-x这样的命令,以将项目的所有要求变为master
  • 任何改进component-x将需要致力于component-x分支。这样可以将改进推回到主存储库中,然后从那里拉入其他项目并合并到他们的master分支中。

同样,这主要是hackery,如果可能的话,使用子模块会更好。但是,似乎Grails并不真正想要在这方面发挥出色。