Git push из ловушки после обновления завершается неудачно - X не является хранилищем

Я пытаюсь настроить центральное хранилище, которое будет автоматически перемещаться в другое хранилище, когда оно отправляется с моего локального компьютера. Я уже несколько дней гуглю и пробовал каждую комбинацию команд, которую смог найти, но безуспешно.

Настройка: сначала я создал центральный репозиторий как пустой, а затем клонировал его на второй компьютер как не пустой. Я добавил вторую машину как удаленную, называемую "www", к первой машине. Я подтвердил, что могу выполнить "git push www master" вручную с первого компьютера, а второй обновится через SSH. Затем я клонировал репозиторий на мою локальную машину разработки через HTTP. Я могу толкать от местного к центральному просто отлично.

Мой хэнд после обновления в его текущей форме:

#!/bin/bash

cd /var/git_repos/site.git

unset $(git rev-parse --local-env-vars)

branch=$(git rev-parse --abbrev-ref HEAD)

if [ "$branch" == "master" ];
then
  echo "Pushing $branch to www..."
  env -i git push www master
fi

exec git update-server-info

Я собрал это вместе из различных SO и постов в блоге. Он отлично работает, когда выполняется вручную из CLI первого компьютера ("cd /var/git_repos/site.git/hooks; ./post-update"), но я получаю сообщение об ошибке "www не является Git-репозиторием" при выполнении как крюк

Выход:

$ git push
Password:
Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 264 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: Pushing master to www...
remote: fatal: 'www' does not appear to be a git repository
remote: fatal: The remote end hung up unexpectedly
To https://xxx@git.xxx.xxx/site.git
   e3d3a1d..103c819  master -> master

Может кто-нибудь сказать мне, что я делаю не так?

Изменить: я выяснил, что моя первоначальная проблема заключалась в том, что разрешения на site.git были установлены не совсем правильно. Исправив эту проблему, у меня появилась новая проблема.

Новый вывод:

$ git push
Password:
Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 332 bytes, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: I am apache <---- Output of "whoami" for debugging
remote: Pushing master to www...
remote: ssh: connect to host 192.168.1.79 port 22: Permission denied
remote: fatal: The remote end hung up unexpectedly
To https://nnn@git.nnn.nnn/site.git
   29d504c..f14f201  master -> master

Я попытался добавить следующее в мой файл / etc / sudoers безуспешно:

apache ALL=NOPASSWD: /usr/bin/ssh

3 ответа

Это ошибка, которую вы получаете при попытке отправить на неизвестный пульт. Пытаться:

git push thisisprobablynotaremote master

Проверьте

git remote -v

и убедитесь, что www правильно определен, также проверьте

git config --list

www также должен быть там.

Выведите вывод всех команд из самого хука и сравните вывод.

Я бы предложил изменить www на полный URL удаленного репо, на который вы нажимаете. Дополнительно меняется master в master:master может помочь

Не делай

unset $(git rev-parse --local-env-vars)

Я думаю, что вы видели крючки, где люди пытались сделать мерзавец из другого репо. Вы просто делаете все команды относительно текущего репо. Так что тебе не нужно этого делать.

Точно так же не делайте:

env -i git push www master

удалить env -i

Другие вопросы по тегам