Мы используем git с центральным репо (используя Gitosis). Я создал хук после получения, чтобы генерировать электронное письмо в список рассылки разработчиков всякий раз, когда изменения отправляются в центральное репо, и для создания документации из папки документации в репозитории 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 )
Сценарий электронной почты работает, но генерация документации не работает. Содержимое pull_log.log:
fatal: Not a git repository: '.'
Это заставляет меня думать, что он не переходит в правильный каталог в строке 5 приведенного выше сценария. Я ошибся? Как я могу заставить это работать?
Изменить: я обновил хук после получения, как было предложено в ответах. Скрипт теперь такой:
#!/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
Есть еще помощь?
О, и если я сам запускаю скрипт, он работает (я запускаю его, говоря hooks/post-receive)
Проблема обнаружена благодаря serverfault — в основном переменные среды GIT_DIR
и GIT_WORK_TREE
устанавливаются при запуске хука, и это негативно влияет на git pull. Удаление переменных устраняет проблему.
git pull
наpwd
и посмотрите, что появится в журнале. - person Dennis Williamson   schedule 23.02.2010