如何自动拉git子模块?

我被分配了一个项目,在那里我将进行后端开发,而另一个人将在进行前端开发。要求前端开发人员不能访问开发服务器,也不能访问项目代码。因此,我们决定为前端创建另一个存储库。

问题是我不知道当某些东西提交到远程仓库时,如何使子模块立即从远程服务器中拉出。我需要开发人员提交并立即在前端看到更改。

我一直在阅读有关git钩子的信息,发现可以使用post-receive钩子来实现。但是,它似乎不起作用。这是我所做的:

  1. 在主项目的根目录中,我找到了以下目录/.git/modules/submodule-directory/hooks
  2. 我创建了post-receive具有可执行权限的文件。
  3. post-receive文件内容

    #!/bin/sh
    git pull
    
  4. 将更改从本地计算机推送到子模块存储库,但什么也没发生。

我究竟做错了什么?

编辑:我将澄清有关我的问题的几点。

我有两个存储库:“主”存储库,它是整个项目;还有另一个存储库,它是前端的东西(视图,资产等)。让我们将其称为“前端”存储库。

在我的主存储库中,我在/ submodules / frontend内添加了前端回购作为子模块。这样,外包的前端开发人员将看不到有关实际项目的任何信息。他们只会看到他们在做什么。

实际上,这在访问控制方面非常有效,而且我可以轻松地与项目分开监视前端开发的进度。但是有一个我不知道该怎么做的问题。

我们的项目有两个单独的服务器-开发服务器和生产服务器。开发服务器需要始终位于主仓库和前端仓库中的master分支中。这样,前端团队和后端团队都将能够看到他们的更新。即使前端团队主要使用模板,模板也可以访问存储在数据库中的数据,并使用大量集成到后端的内容(例如模型)。

为了使此“系统”正常工作,我需要前端存储库始终在“前端”远程存储库中有新的提交时提取并合并换句话说,如果前端团队执行git commitgit push,则开发服务器中的“前端”回购子模块需要立即进行git pull因此,当前端人员测试他们的东西时,他们将立即看到最新的更改。

我读过该post-receive钩子可以做到这一点,但是我需要这个钩子仅存在于子模块中。因此,经过一番挖掘,我发现所有子模块挂钩都存在于中/.git/modules/submodules/frontend/hooks因此,我post-receive使用以下代码在该目录中创建了钩子:

#!/bin/sh
git pull

但这是行不通的。我的问题是如何使挂钩与子模块内部的后期接收一起使用?

我知道我所走的路还远远不够完美,但这是在允许开发人员仅访问一个目录而无权访问开发服务器时对我有意义的唯一方法。

我希望这是有道理的。

阿塞纳尔

当您使用时git pull,(基本上)等效于git fetch && git merge这不会更新子模块。

如果我了解您的需求,则可以使用接收后挂钩(在主.git / hooks目录中)中的命令git submodule update(或git submodule foreach 'git pull'完成所需的操作

添加(基于您的版本):根据我的理解,您需要post-receive在gitlab前端存储库上添加该钩子,并且该钩子必须执行命令git submodule update(或者可能git submodule foreach 'git fetch && git merge'在开发服务器中执行(使用ssh命令或其他命令))。

但是重新考虑开发服务器的安装方式可能会更容易,您可以将两个存储库完全分开安装(而不是将前端作为子模块),也可以将子模块/前端添加到.gitignore目录中。这不一定意味着您必须frontend从子模块中删除,而不必在开发服务器中使用它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章