При отправке в наш общий голый репозиторий (через ssh) пост-фиксация не работает должным образом.
Это довольно распространено, как я обнаружил здесь во многих потоках, и он отлично работает для двух других репозиториев на том же сервере, что сводит меня с ума.
#!/bin/sh
GIT_WORK_TREE=/ab/cd/staging git checkout -f
Сам репозиторий находится в том же каталоге, что и каталог, в который крючок должен извлекать
/ab/cd/barerepo
При нажатии не извлекает файлы по намеченному пути, но выдает следующее сообщение об ошибке:
Writing objects: 100% (3/3), 299 bytes, done.
Total 3 (delta 2), reused 0 (delta 0)
fatal: Could not jump back into original cwd
error: hooks/post-receive exited with error code 128
Я не смог найти никакой информации о том, что это означает. (Насколько я могу судить, Google выводит коммиты только из вклада в сам git). Итак, я прочитал, угадал и попробовал…
Сейчас конфигурация выглядит так
[core]
repositoryformatversion = 0
filemode = true
bare = true
, но я также было это (без усилий)
[core]
repositoryformatversion = 0
filemode = true
bare = true
sharedrepository = 1
worktree = /ab/cd/staging
logallrefupdates = true
[receive]
denyNonFastforwards = true
. Я также добавил вторую строку в обработчик post-receive
echo "post-receive done" > updated.txt
. Он записывает файл в каталог чистого репозитория. Для меня это имеет смысл, поскольку для GIT_DIR, похоже, установлено значение '.', Что подтверждается фрагментом post-receive, который я получил из другого вопроса SO
echo Running $BASH_SOURCE
set | egrep GIT
echo PWD is $PWD
Результат:
Running hooks/post-receive
GIT_DIR=.
PWD is /ab/cd/barerepo
Итак, как я могу вернуть git, чтобы вернуться к исходный cwd (текущий рабочий каталог?)? К вашему сведению: я все еще новичок в git, и у меня тупое ощущение, что я упускаю что-то очевидное, но отсутствие чего-либо существенного в этом конкретном сообщении об ошибке заставляет меня задуматься. Кстати, само нажатие работает нормально.