繁体   English   中英

如何自动拉取git子模块?

[英]How can I pull git submodule automatically?

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

问题是我不知道如何使子模块在远程服务器提交到远程服务器时立即从远程服务器拔出。 我需要开发人员提交并立即看到前端的更改。

我一直在阅读git hooks,我发现我可以使用post-receive hook来做到这一点。 但是,它似乎不起作用。 这是我做的:

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

     #!/bin/sh git pull 
  4. 推动从我的本地机器到子模块仓库的更改但没有任何反应。

我究竟做错了什么?

编辑:我将澄清有关我的问题的一些观点。

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

在我的主存储库中,我添加了frontend repo作为子模块,位于/ submodules / frontend内。 这样,外包的前端开发人员将无法看到有关实际项目的任何信息。 他们只会看到他们正在做的事情。

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

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

为了使这个“系统”工作,我需要前端仓库总是在“前端” 远程仓库中有新的提交时进行获取和合并。 换句话说,如果前端团队执行git commitgit push ,开发服务器中的“前端”repo子模块需要立即git pull 所以,当前端人员测试他们的东西时,他们会立即看到最新的变化。

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

#!/bin/sh
git pull

但这没效果。 我的问题是如何使钩子与子模块内的后接收一起工作?

我知道我所采取的路线远非完美,但这是允许开发人员只访问一个目录而无需访问开发服务器的唯一方法。

我希望这是有道理的。

当你git pull ,这(基本上)等同于git fetch && git merge 这不会更新子模块。

如果我了解您的需求,您可以使用命令git submodule update (或git submodule foreach 'git pull' )在您的post-receive挂钩(主.git / hooks目录中)中完成。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM