1

问题:将 git 存储库嵌套在 git存储库中,而不将第二个存储库存储在主机主存储库中。回购需要是两个独立的实体。通过这种方式,我可以轻松更新客户端站点的基本代码(用于多个站点)。

两个 repos 的原因:我有一个我的项目使用的基本 php 框架。每个客户都有自己的存储库,其中包含该站点所需的文件。由于 git/submodules 的工作方式,我必须将“框架”作为主仓库,将“客户代码”作为子模块。原因是我必须拥有index.php 和 .htaccess(框架的一部分)在根目录中。这很好,因为我的框架旨在根据需要进行扩展。我可以将我需要的任何客户端文件放在“站点”文件夹中,并将其存储为单独的存储库。明显的缺点是为了设置站点,您必须首先安装“框架 repo”,然后安装“client repo”。由于这些是私有的,因此此设置很好。我也喜欢能够从另一个项目更新我的框架的好处。现在麻烦的是我从该克隆中所做的任何推送都包括“客户端代码”。此外,由于我需要对框架的本地测试进行相同的设置,因此将子模块添加回主框架存储库。我想好为什么不克隆包含“客户端代码”的“站点”文件夹并将该文件夹添加到忽略列表中。我必须手动更新每个,但那很好。然而 torisegit 似乎认为它现在是一个子项目(有限支持),我什至不能将该文件夹添加到忽略列表中。所以我假设嵌套 git 克隆是不好的,但我可能做错了。

目标:我需要能够部署两个存储库。我的“框架”我肯定必须是基础/根仓库。然后我需要以某种方式将第二个“客户端”存储库嵌入到基本存储库内的文件夹中。“客户端”存储库从不存储框架代码,只存储它自己的代码。我希望能够更新和推送对“框架代码”的更改(它的 alpha 版本有很多错误修复),而不需要存储任何关于“客户端代码”的内容,因此我可以轻松地将其克隆到新站点的新文件夹中. 同样,客户端代码存储在框架根目录上一级的单个文件夹中。(见下面的例子)。当我尝试复制粘贴文件夹甚至手动将其添加到忽略文件时,作为 git clone 执行此操作会破坏 TortoiseGit 和可能的 git。

最后的想法:也许子项目会起作用,但似乎没有太多支持,我不明白如何使用它。我试图将它保留在主要工具上,以便我的两个主要工具 TortoiseGit 和 NetBeans 支持一切。也许有一种方法可以不在主仓库中存储子模块,但我找不到它。也许子文件夹会起作用,但似乎又没有太多支持。似乎最简单的方法就是忽略该文件夹,但至少 TortoiseGit 在我尝试此操作时似乎坏了,但我可能做错了。

示例文件夹布局:

-.git(框架回购)
- 系统 *framework 文件夹
-- foo *framework 文件夹
-- bar *framework 文件夹
- 站点(第二个 repo aka 客户端的根目录)
-- .git (客户端仓库)
-- config.php *客户端文件
- index.php *框架文件
- .htaccess *框架文件

“系统”文件夹、index.php 和 .htaccess 是 PHP 框架的一部分,对我的所有站点都是通用的。“站点”文件夹包含包含该站点文件的第二个存储库。第二种选择是重写我的框架,使其存储在自己的文件夹中并被新的 index.php 调用。然而,这是一次重大的改写,对它的写作方式来说是一场噩梦。加上处理 .htaccess 文件的问题,因为它必须在根目录中。当然我可以复制它,但是对该文件的任何更改都不会在拉取中得到更新。但在这一点上,我认为这是唯一的方法。

希望这是有道理的。我没有想法,但真的想让这个工作。

4

2 回答 2

2

您始终可以将第二个存储库克隆到您喜欢的第一个存储库中的任何位置,然后将第二个存储库添加到您的.gitignore文件中。

在上面的示例中,您只需添加:

site/

到你的.gitignore.

于 2012-09-13T21:58:13.380 回答
1

Git 子模块是我能想到的最好的东西。在这里查看。将代码拆分为可重用的存储库也非常方便。

于 2012-09-13T21:48:12.583 回答