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



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

/home/repo/.git  

这是我克隆的存储库,用于获取新网站的基本代码即,我将其克隆到

/var/www/site1

我还创建了几个模块作为存储库,有些网站会使用这些模块,有些则不会。

/home/modules/mod1/.git  
/home/modules/mod2/.git

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

/var/www/site1  

模块目录使用与主repo相同的文件夹结构进行设置,当我在主repo克隆之上克隆它们时,它们应该合并/替换现有文件。(很少有文件重叠)

我的最佳解决方案是以某种方式命名回购,这样当我部署一个新站点时,我会做一些类似的事情:

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

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

git pull origin master  
git pull mod1  
git pull mod2  

或者优选地:

git pull origin master 

也将调用CCD_ 1和CCD_。

我一直在研究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

说明:

正如您所说,您的主模块(/home/repo)和mod1mod2等具有相同的文件夹结构。子模块实际上并不合适,因为子模块必须位于主repo的子目录中。在这个版本中,您的本地git存储库(由clone创建)知道三个远程存储库。在merge操作之后,它的状态将与它们中的任何一个都不一样。mod1的merge将引入mod1"拥有"的任何新文件。如果home/repo中的任何文件与mod1中的文件同名,则可能会出现合并冲突。等等。您可以向mod10提供一个标志,以始终从mod1中选择版本,我相信您说过这是您想要的行为。

简而言之,不能将一个git repo作为另一个的sudirectory。

这个规则有一个例外:您可以将一个git repo作为另一个的子模块,但这有很多限制和不便。

一般的方法是有一个主git-reo,它没有自己的实际约定,但只跟踪几个git-reo作为其子模块。

或者,我建议使用Android项目开发的repo工具来达到这个目的。它包括创建一个小的git存储库,其中只包含一个XML文件(称为manifest),该文件跟踪子项目签出到哪里以及它们是如何粘合在一起的。这在Linux和Mac上运行得很好,但不幸的是,它不支持Windows(repo需要操作系统的符号链接支持)。

在某种意义上,git子模块和android repo解决的任务本质上相同,但使用的方法略有不同。

vcsh工具允许在同一目录中维护多个repo。

相关内容

  • 没有找到相关文章

最新更新