问题:将git repo嵌套在git repo WITHOUT 中,将第二个repo存储在hosts master repo中。回购必须是两个独立的实体。这样我就可以轻松更新客户端站点基本代码(在多个站点上使用)。
两个回购的原因:我有一个我的项目使用的基础php框架。每个客户端都有自己的repo,其中包含该站点所需的文件。由于git / submodules的工作方式,我必须将“框架”保留为主仓库,并将“客户端代码”作为子模块。原因是我必须拥有 index.php& .htaccess (框架的一部分)在根目录中。这很好,因为我的框架旨在根据需要进行扩展。我可以将我需要的任何客户端文件放在“site”文件夹中,并将其作为单独的repo存储。明显的缺点是为了设置网站,你必须首先安装“框架仓库”,然后安装“客户端仓库”。由于这些是私人的,这个设置很好。我也喜欢能够从另一个项目更新我的框架的好处。麻烦现在,我从该克隆做的任何推动包括“客户端代码”。此外,由于我需要对框架的本地测试进行相同的设置,因此子模块会被添加回主框架repo。我想为什么不克隆包含“客户端代码”的“site”文件夹并将该文件夹添加到忽略列表中。我必须手动更新每个,但再次那很好。然而,torisegit似乎认为它现在是一个子项目(有限的支持),我甚至无法将该文件夹添加到忽略列表中。所以我假设嵌套git克隆很糟糕,但我可能做错了。
目标:我需要部署两个回购。我的“框架”肯定必须是基础/根回购。然后我需要以某种方式在基础仓库内的文件夹中嵌入第二个“客户”仓库。 “客户端”仓库从不存储框架代码,只存储自己的代码。我希望能够更新并推送对“框架代码”的更改(其alpha版本有很多错误修复),而不存储任何有关“客户端代码”的内容,因此我可以轻松地将其克隆到新网站的新文件夹中。客户端代码再次存储在距框架根目录一级的单个文件夹中。 (见下面的例子)。当我尝试复制粘贴文件夹甚至手动将其添加到忽略文件时,这样做作为git克隆会破坏TortoiseGit和git。将其添加为子模块会将其添加到主仓库中,因此当我克隆它时会尝试添加它。
最后的想法:也许子项目可行,但似乎没有太多的支持,我不明白如何使用它。我试图将它保留给主要工具,以便我的两个主要工具TortoiseGit和NetBeans支持所有内容。也许有一种方法可以不在主仓库中存储子模块,但我找不到它。也许子文件夹可以工作,但似乎没有太多支持它。似乎最简单的只是忽略文件夹,但至少TortoiseGit似乎在我尝试这个时打破但我可能做错了。
示例文件夹布局:
-.git (framework repo) - system *framework folder -- foo *framework folder -- bar *framework folder - site (root for second repo aka client) -- .git (client repo) -- config.php *client file - index.php *framework file - .htaccess *framework file
“system”文件夹,index.php和.htaccess是PHP框架的一部分,对我所有的网站都是通用的。 “site”文件夹包含第二个包含该站点文件的repo。第二个选项是重写我的框架,使其存储在自己的文件夹中,并由新的index.php调用。然而,这是一个重大的改写与路径的噩梦做的写作方式。加上处理.htaccess文件的问题,因为它必须在根目录中。当然我可以复制它,但随后对该文件的任何更改都不会在拉动中更新。但在这一点上,我认为这是唯一的方法。
希望这是有道理的。我没有想法,但我真的想让它发挥作用。
答案 0 :(得分:2)
您可以随时将第二个存储库克隆到您喜欢的第一个存储库中,然后将第二个文件夹添加到.gitignore
文件中。
在上面的示例中,您只需添加:
site/
到.gitignore
。
答案 1 :(得分:1)
Git Submodules是我能想到的最好的东西。看看here。将代码拆分成可重用的存储库非常方便。