在具有相同顶级父目录的文件夹中使用多个Git repos?

时间:2012-10-04 05:52:37

标签: linux git magento symlink git-submodules

我正在使用基于Magento主题(GitHub repo)的神话般的HTML5 Boilerplate并使用我自己的子主题(私人Git Repo)扩展Magento-Boilerplate商店(与Git连接的SVN回购) 。这些都存在于一个www文件夹中,恰好是所有三个项目的顶级目录。我想干净地将所有这些集成到各自的存储库中,但是我发现的单个目录中的多个存储库的唯一解决方案是子模块(我喜欢它的想法,但据我所知,需要每个项目到在主Git仓库的子文件夹中)并将文件符号化(应该工作,但有点乱,而且很烦人跟上)。

有没有干净的方法来完成这项工作?这是我的文件夹结构的一个例子。我已经说明了每个文件/目录所在的repo - M = Magento,B = Boilerplate,P = Private:

/www
   |-- app [M]
       |-- frontend [M]
           |-- base [M]
           |-- magento-boilerplate [B]
               |-- default [B]
               |-- myprivatetheme [P]
   |-- skin [M]
       |-- frontend [M]
           |-- base [M]
           |-- magento-boilerplate [B]
               |-- default [B]
               |-- myprivatetheme [P]
   |-- .htaccess [M][B][P]
   |-- favicon.ico [M][P]

正如你所看到的,即使没有整个.htaccess和favicon.ico在多个存储库中混乱(我只是gitignore或 - 在Magento和Boilerplate存储库中保持未更改它们并使用我的私有存储库)顶级目录是www,因为Magento将代码和主题拆分为具有www的公共父级的单独文件夹的方式。因为你甚至可以在技术上说app,skin和各种前端文件夹也存在于多个repos中,因为它们必须存在于每个repo中,一直到结构的顶级目录。

sym链接这些repos来自单独的文件夹我唯一的解决方案吗?这不是一个大问题,但我真的很想知道Git是否足够灵活来处理我的案子。看起来modman可能是专门为了解决这个符号链接问题而创建的。

3 个答案:

答案 0 :(得分:3)

我确认没有简单的方法将Git repo结构映射到部署结构(这实际上是您的文件夹结构显示的内容:部署到Web文件夹中)

modman”似乎是一种有效的自动化方式,但您需要记住,如果您对其中一个子模块进行任何更改,则需要提交它们,将它们推送到各自的上游, 转到父git仓库,再次提交 并推送。
所有这些似乎都没有被modman考虑在内。

OP Colt McCormack报告正在研究modgit

  

modgit是优秀modman工具的替代品   直接受其启发, modgit允许您在项目中物理部署Git模块(无符号链接)
  此外,您可以定义包含/排除过滤器以仅部署您选择的文件和文件夹。

答案 1 :(得分:2)

工具vcsh用于在不使用符号链接的情况下在几个repos(ssh,zsh,vim,emacs,...)中组织$ HOME中的文件。 vcsh使用假的裸git repos。它也与mr很好地协同工作,可以轻松组织多个回购(同步拉,推,......)。

虽然vcsh适用于$ HOME,但它可以用于任何目录。

vcsh的readme文件是一个很好的开始,应该帮助您(决定)它是否是您正在寻找的工具。 vcsh的维护者Richard Hartmann在2012年FOSDEM上谈到了这个问题:info - slides - video

答案 2 :(得分:1)

还有multigit

  

Multigit允许您通过公共目录检出多个git存储库,并提供简单的工具,让您可以像以前一样继续使用git,而不会受到多重攻击。

     

对于由不同组件组成的项目非常有用,这些组件是单独开发的,但需要在项目目录结构的不同部分中部署文件。

     

这不能使用git子模块或git子树来完成,它只允许子项目在自己的子目录中部署文件。 Multigit允许子项目在项目的任何目录中部署文件,类似于union文件系统,其中每个存储库都是一个层。

     

变更管理和模块管理的这种组合可能有用的一些例子:

     
      
  1. 管理在单独的存储库中对Web应用程序进行的自定义。
  2.   
  3. 将您的主目录置于源代码管理之下。
  4.   
  5. Linux发行版的软件包和/或配置管理器。
  6.