2014-02-03 4 views
5

Я пытаюсь автоматически обновить свой подмодуль, расположенный в var/www/php/vendor/projectX при каждой фиксации в супер-проекте var/www. Я добавил эти строки в файле .git/hooks/post-receive:Обновление подмодуля Git из post-receive hook

#!/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 [email protected]:. 
3dc2404..bc46dd6 dev -> dev 

Соответствующий раздел присутствует в .gitmodules файл, однако, и так файлы в .git/modules. Запуск git submodule update --init --recursive вручную отлично работает. Это только при запуске с крючка, что он не работает. Спасибо

ответ

7

Try и:

  • компакт-диска в корневой папке этого репо
  • указать рабочую дерево и каталог GIT для этой папки при выполнении команды GIT.

Это дало бы в вашем почтовом-получить сценарий крюком:

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

Большое спасибо, это работает как шарм. Я потратил много времени на поиск этого ответа. –

+0

Зачем нужно cd в папке, если вы предоставляете '--work-tree'? – Clijsters

+0

@Clijsters 3 с половиной года спустя, я не слишком уверен. И теперь я бы написал это 'git -C/var/www подмодуль update --init --recursive' Но, возможно, в то время, подмодули должны были использоваться только из корневой папки. – VonC

Смежные вопросы