我正在使用基于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可能是专门为了解决这个符号链接问题而创建的。
答案 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文件系统,其中每个存储库都是一个层。
变更管理和模块管理的这种组合可能有用的一些例子:
- 管理在单独的存储库中对Web应用程序进行的自定义。
- 将您的主目录置于源代码管理之下。
- Linux发行版的软件包和/或配置管理器。
醇>