обработчик git post-receive не может вернуться к исходному cwd

При отправке в наш общий голый репозиторий (через 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). Итак, я прочитал, угадал и попробовал…

  • дополнительно установил GIT_DIR в обработчике post-receive
  • , переинициализировав голое репо с помощью --git-dir = / ab / cd / barerepo --working-dir = / ab / cd / staging
  • установка рабочего каталога вручную в barerepo / config
  • , установка пустого пустого репо и фиксация
  • установки чистого репо путем клонирования

Сейчас конфигурация выглядит так

[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, и у меня тупое ощущение, что я упускаю что-то очевидное, но отсутствие чего-либо существенного в этом конкретном сообщении об ошибке заставляет меня задуматься. Кстати, само нажатие работает нормально.

8
задан fab1An 11 July 2011 в 23:37
поделиться