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