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)
也会称之为拉动mod1和mod2.
我一直在看git子模块和分支,但无法弄清楚它们是否是我需要的.
以下是对您所需的部署命令的轻微更改的建议:
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)和您的mod1等mod2具有相同的文件夹结构。那么子模块并不真正合适,因为子模块必须位于主存储库的子目录中。在此版本中,您的本地 git 存储库(由clone)了解三个远程存储库。操作完成后merge,它的状态将不会与它们中的任何一个相同。mod1 的of mergemod1 将引入 mod1“拥有”的任何新文件。如果 中的任何文件home/repo与 等中的文件同名mod1,您可能会遇到合并冲突。您可以提供一个标志merge来始终选择版本mod1,我相信您说的是您想要的行为。