来自post-receive钩子的Git子模块更新

时间:2014-02-03 19:28:10

标签: git mapping hook git-submodules

我正在尝试在var/www/php/vendor/projectX超级项目的每次提交时自动更新位于var/www的子模块。我在.git/hooks/post-receive文件中添加了这些行:

#!/bin/sh
echo "Updating submodules recursively"
pwd
git submodule update --init --recursive

但是当我承诺超级项目时,我得到了这个:

Counting objects: 8, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 346 bytes | 0 bytes/s, done.
Total 4 (delta 3), reused 0 (delta 0)

remote: Updating submodules recursively
remote: /var/www/.git
remote: No submodule mapping found in .gitmodules for path 'php/vendor/projectX'
To www-data@11.22.33.44:.
3dc2404..bc46dd6  dev -> dev

然而,.gitmodules文件中存在相应的部分,.git / modules中的文件也是如此。手动运行git submodule update --init --recursive可以正常工作。只有当它从钩子运行时才会起作用。谢谢

1 个答案:

答案 0 :(得分:8)

尝试并:

  • cd到该回购的根文件夹
  • 在执行git命令时指定该文件夹的工作树和git目录。

这会在你的post-receive钩子脚本中给出:

cd /var/www/
git --git-dir=/var/www/.git --work-tree=/var/www submodule update --init --recursive