多个git存储库克隆到同一目录中

Jam*_*mie 5 git multiple-repositories

我的项目有一个标准的存储库

/home/repo/.git  
Run Code Online (Sandbox Code Playgroud)

这是我克隆的存储库,以获取新网站的基本代码,即我克隆了这个

/var/www/site1
Run Code Online (Sandbox Code Playgroud)

我也有几个模块,我作为存储库创建,一些网站将使用这些模块,一些不会.

/home/modules/mod1/.git  
/home/modules/mod2/.git
Run Code Online (Sandbox Code Playgroud)

有没有办法可以将这些模块克隆到同一个站点文件夹中?

/var/www/site1  
Run Code Online (Sandbox Code Playgroud)

模块目录设置与主仓库具有相同的文件夹结构,当我在主仓库克隆顶部克隆它们时,它们应合并/替换现有文件.(很少有文件重叠)

我的最佳解决方案是以某种方式命名repo,以便在部署新站点时我执行以下操作:

cd /var/www/newsite  
git clone /home/repo/.git  
git clone /home/modules/mod1/.git  
git clone /home/moudles/mod2/.git  
Run Code Online (Sandbox Code Playgroud)

当我有更新到网站,我可以做一个像拉:

git pull origin master  
git pull mod1  
git pull mod2  
Run Code Online (Sandbox Code Playgroud)

或者最好:

git pull origin master 
Run Code Online (Sandbox Code Playgroud)

也会称之为拉动mod1mod2.

我一直在看git子模块和分支,但无法弄清楚它们是否是我需要的.

gcb*_*son 4

以下是对您所需的部署命令的轻微更改的建议:

cd /var/www/  
git clone /home/repo/.git newsite
git remote add mod1 /home/modules/mod1/.git  
git remote add mod2 /home/moudles/mod2/.git  

cd newsite
git merge mod1/master
git merge mod2/master
Run Code Online (Sandbox Code Playgroud)

解释:

正如您所说,您的主模块(/home/repo)和您的mod1mod2具有相同的文件夹结构。那么子模块并不真正合适,因为子模块必须位于主存储库的子目录中。在此版本中,您的本地 git 存储库(由clone)了解三个远程存储库。操作完成后merge,它的状态将不会与它们中的任何一个相同。mod1 的of mergemod1 将引入 mod1“拥有”的任何新文件。如果 中的任何文件home/repo与 等中的文件同名mod1,您可能会遇到合并冲突。您可以提供一个标志merge来始终选择版本mod1,我相信您说的是您想要的行为。