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

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

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

1 голос
/ 27 апреля 2011

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

git push thisisprobablynotaremote master

Проверить

git remote -v

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

git config --list

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

Вывести выходные данные всех команд из самой ловушки и сравнить выходные данные.

0 голосов
/ 27 апреля 2011

Не делай

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

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

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

env -i git push www master

удалить env -i

0 голосов
/ 27 апреля 2011

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

...