#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. Я пробовал эти команды в качестве последней попытки, но их удаление не имеет значения.