3

我正在开发一个Magento商店(连接到 Git 的 SVN 存储库),利用基于 HTML5 样板的Magento-Boilerplate主题(GitHub 存储库)并用我自己的子主题(私有 Git 存储库)扩展它。这些都存在于一个 www 文件夹中,该文件夹恰好是所有三个项目的顶级目录。我想将所有这些干净地集成到它们各自的存储库中,但是我发现的单个目录中多个存储库的唯一解决方案是子模块(我喜欢这个想法,但据我所知,要求每个项目位于主 Git 存储库的子文件夹中)并将文件符号链接到适当的位置(应该可以工作,但有点混乱而且很难跟上)。

有没有一种干净的方法来完成这项工作?这是我的文件夹结构的示例。我已经指出每个文件/目录所在的 repo(s) - 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 位于多个存储库中(我只会在 Magento 和 Boilerplate 存储库中使用 gitignore 或 --assume-unchanged 并使用我的私有存储库)顶级目录是 www,因为 Magento 将代码和主题拆分到具有 www 的共同父级的单独文件夹中的方式。因此,从技术上讲,您甚至可以说应用程序、皮肤和各种前端文件夹也存在于多个存储库中,因为它们必须存在于每个存储库中,一直到结构的顶级目录。

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

4

3 回答 3

3

我确认没有简单的方法将 Git 存储库结构映射到部署结构(这基本上是您的文件夹结构显示的内容:部署到 Web 文件夹)

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

OP Colt McCormack报告研究modgit

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

于 2012-10-04T06:28:15.127 回答
2

工具vcsh用于在不使用符号链接的情况下将 $HOME 中的文件组织到几个 repos(ssh、zsh、vim、emacs 等)中。vcsh 为此使用了假的裸 git 存储库。它还可以与mr一起很好地工作,可以轻松组织多个 repos(同步拉、推……)。

尽管 vcsh 是为 $HOME 设计的,但它可以用于任何目录。

vcsh 的自述文件是一个很好的开始,它应该可以帮助您(决定)它是否是您正在寻找的工具。vcsh 的维护者 Richard Hartmann 在 FOSDEM 2012 上谈到了它:信息幻灯片视频

于 2012-10-07T23:51:29.933 回答
1

还有multigit

Multigit 允许您在一个公共目录上检出多个 git 存储库,并提供简单的工具让您可以像以前一样继续使用 git,而 multigit 不会妨碍您。

对于由单独开发的不同组件组成但需要在项目目录结构的不同部分部署文件的项目很有用。

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

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

  1. 在单独的存储库中管理对 Web 应用程序所做的自定义。
  2. 将您的主目录置于源代码控制之下。
  3. Linux 发行版的包和/或配置管理器。
于 2017-10-31T10:29:59.843 回答