Мы используем git с центральным репо (используя Gitosis). Я создал post-receive hook для генерации сообщения электронной почты в список рассылки dev, когда изменения переносятся на центральное репо, и для создания документации из папки документации в репозитории git.
Следовательно, в ~ git/у меня есть каталог, мы будем называть его 'a', который содержит клон репо git. Крюк post-receive выглядит так:
#!/bin/bash
cd ~git/repositories/a.git
. ~git/post-receive-email &> /dev/null
( cd ~git/a && git pull &> ~git/pull_log.log && php ~git/a/scripts/generate_markdown_documentation.php &> ~git/doc_log.log )
Работает электронная почта script, но генерации документации нет. Содержимое pull_log.log:
fatal: Not a git repository: '.'
Это заставляет меня думать, что он не переходит в правильный каталог в строке 5 выше script. Я ошибаюсь? Как я могу заставить это работать?
Изменить: Я обновил hook после приема, как это было предложено в ответах. Теперь script:
#!/bin/bash
function die {
echo "$*" >&2; exit 1
}
function checkgit {
[ -d "$1/.git" ] || die "$1 could not possibly be a git repo; $1/.git is not a dir"
}
cd ~git/repositories/a.git
. ~git/post-receive-email &> /dev/null
( set -x
checkgit ~git/a
cd ~git/a
checkgit .
pwd
git pull
php ~git/a/scripts/generate_markdown_documentation.php )
И я получаю следующий вывод из git push:
+ checkgit /var/git/a
+ '[' -d /var/git/a/.git ']'
+ cd /var/git/a
+ checkgit .
+ '[' -d ./.git ']'
+ pwd
/var/git/a
+ git pull
fatal: Not a git repository: '.'
+ php /var/git/a/scripts/generate_markdown_documentation.php
Чем больше помощи?
О, и если я запустил script сам, он работает (я запускаю его, говоря "hooks/post-receive" )
Обнаружена проблема, благодаря serverfault - в основном, переменные окружения GIT_DIR
и GIT_WORK_TREE
устанавливаются при запуске hook, и это влияет на git тянуть вниз. Исправление переменных устраняет проблему.