Мы используем git с центральным репо (используя Gitosis). Я создал хук post-receive для генерации электронного письма в список рассылки dev при каждом внесении изменений в центральное хранилище и для создания документации из папки документации в git repo.
Поэтому в ~ git / у меня есть каталог, мы назовем его 'a', который содержит клон git-репо. Крюк после получения выглядит так:
#!/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. Сброс переменных устраняет проблему.