问题在于,我不知道如何使子模块在远程库提交内容时立即从远程服务器上拉取。我需要开发人员提交并立即看到前端的变化。
我一直在阅读关于Git钩子的文档,并且发现我可以使用“post-receive”钩子来完成这个任务。然而,它似乎没有起作用。这是我所做的:
- From the main project's root directory, I found the following directory /.git/modules/submodule-directory/hooks
- I created
post-receive
file with executable permission allowed. Contents of
post-receive
file:#!/bin/sh git pull
Pushed a change from my local machine to the submodule repo but nothing happened.
我做错了什么?
编辑:我想澄清一些关于我的问题的点。
我有两个存储库:一个是“main”存储库,它是整个项目;另一个是前端存储库(视图、资源等)。让我们称其为“frontend”存储库。
对于我的主存储库,我将前端存储库作为子模块添加到了/submodules/frontend文件夹中。这样,外部承包商就无法看到实际项目的任何内容。他们只能看到自己正在开发的东西。
从访问控制方面来说,这实际上很完美,并且我可以轻松地监控前端开发的进度,与项目分开。但是还有一个问题我不知道该怎么解决。
我们的项目有两台独立的服务器——开发服务器和生产服务器。开发服务器需要始终处于主repo和前端repo的master分支。这样,前后端团队都能看到他们的更新。尽管前端团队主要使用模板,但这些模板可以访问存储在数据库中的数据,并且使用了许多已经集成到后端的内容(例如模型)。
为了使这个“系统”工作,我需要前端存储库在“frontend”远程存储库有新的提交时始终fetch和merge。换句话说,如果前端团队执行git commit
和git push
,开发服务器中的“frontend”子模块需要立即执行git pull
。因此,当前端团队测试他们的东西时,他们将立即看到最新的更改。
我了解到可以使用post-receive
hook来实现这一点,但我需要这个hook仅用于子模块。因此,在查找后,我发现所有子模块钩子都存在于/.git/modules/submodules/frontend/hooks
中。因此,我在该目录下创建了一个post-receive
hook,并编写了以下代码:
#!/bin/sh
git pull
但这并没有起作用。我的问题是如何使钩子在子模块内部的post-receive下正常工作?
我知道我所采取的方法远非完美,但这是唯一让我感到有意义的方式,因为它可以让开发人员只访问一个目录,而无需访问开发服务器。
我希望这有意义。
git pull
可能会给你一些提示。 - renefritze