Сбой Git push из перехвата после обновления — X не является репозиторием

#git #git-push #post-update

#git #git-push #после обновления

Вопрос:

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

Настройка: сначала я создал центральный репозиторий как пустой, а затем клонировал его на вторую машину как не-пустой. Я добавил вторую машину в качестве удаленной, называемой «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 и в блогах. Он отлично работает при выполнении вручную из командной строки первого компьютера («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
  

Ответ №1:

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

 git push thisisprobablynotaremote master
  

Проверьте

 git remote -v
  

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

 git config --list
  

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

Распечатайте выходные данные всех команд из самого перехвата и сравните выходные данные.

Комментарии:

1. Я не получаю выходных данных от повторения любой команды. Я так понимаю, это не очень хорошо, не так ли?

Ответ №2:

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

Ответ №3:

Не делайте

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

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

Аналогично, не делайте:

 env -i git push www master
  

удалите env -i

Комментарии:

1. Я пробовал эти команды в качестве последней попытки, но их удаление не имеет значения.