多个Git存储库上的单一只读视图

多个Git存储库上的单一只读视图,git,jenkins,Git,Jenkins,我们正处于从SVN到Git的过程中,但面临一些关键的实际问题,我们还无法回答这些问题 目前,我们有一个大型SVN存储库,其中包含100多个项目。 它们由3个Jenkins作业构建,即许多项目由同一个作业构建,并且它们也总是一起发布(尽管它们只是松散耦合的) 无法更改此设置,因为无法维护100多个Jenkins作业,并且每个作业都需要大约3GB的磁盘空间(无论它构建了多少个项目)。 如果将其与3+个活动分支相乘,这将完全耗尽我们的可用资源 简单的解决方案是将一个SVN存储库转换成一个Git存储库,

我们正处于从SVN到Git的过程中,但面临一些关键的实际问题,我们还无法回答这些问题

目前,我们有一个大型SVN存储库,其中包含100多个项目。
它们由3个Jenkins作业构建,即许多项目由同一个作业构建,并且它们也总是一起发布(尽管它们只是松散耦合的)

无法更改此设置,因为无法维护100多个Jenkins作业,并且每个作业都需要大约3GB的磁盘空间(无论它构建了多少个项目)。
如果将其与3+个活动分支相乘,这将完全耗尽我们的可用资源

简单的解决方案是将一个SVN存储库转换成一个Git存储库,一切都像以前一样工作。
然而,由于Git不允许在repo内的目录上设置权限,而且正如我们所了解的那样,这也不是正确的“Git方式”,所以拆分存储库将非常好

但接下来我们回到詹金斯的许多工作问题。
原则上,似乎可以为每个Jenkins作业指定多个Git存储库,但如果添加更多存储库,这也很快无法维护,因为Jenkins GUI不擅长处理许多条目。忘记向作业中添加新存储库的可能性也很高

因此,我们研究了子模块、子树和子repo,以便在一组存储库上创建一致的(只读)视图。
此视图(或其中一些视图)应集中管理,Jenkins作业只需签出此视图,即可获得构建项目所需的所有内容。
因为视图的简单更新将从所有包含的存储库中获取最新版本。然而,据我所知,这对任何方法都不起作用,因为它们要么需要特殊命令将包含的存储库更新到最新的远程版本(Jenkins Git插件无法做到),要么甚至需要提交将模块指针向前移动到最新版本

所以这里有一个简单的问题:在不使用大型存储库的情况下,如何使用Git解决这个问题

因为视图的简单更新将从所有包含的存储库中获取最新版本。然而,据我所知,这对任何一种方法都不起作用,因为它们需要特殊的命令来将包含的存储库更新到最新的远程版本

使用Git子模块很容易做到这一点:

  • 你可以
  • 要更新视图,只需执行以下操作:

    git submodule update --remote --recursive
    
  • 擅长操纵多个git回购。