отримання “fatal: не сховище git: '.'” при використанні гачка після оновлення для виконання 'git pull' на іншому репо


90

Я новачок у git, тому прошу вибачення (і, будь ласка, виправте мене), якщо зловживаю тут термінологією, але зроблю все можливе.

Я намагаюся встановити відкрите репозиторій git (концентратор) та робочу копію веб-сайту розробника (prime) на веб-сервері. Я намагався створити його за цією статтею . Я хочу, щоб робоча копія розробки оновлювалася щоразу, коли натискається репозиторій концентратора. У мене складається враження, що для цього є належний гачок post-update, який я створив так:

#!/bin/sh
whoami
cd /path/to/working-copy/
RET=`git pull`
echo $RET

Оновлення

Коли я висуваю зміни з мого локального репо до оголеного концентратора, я отримую такий результат із сценарію після оновлення:

remote: sites
remote: fatal: Not a git repository: '.'

Однак якщо я SSH на сервері як "сайти користувача" і виконати цей скрипт вручну, це чудово працює. Будь-які ідеї щодо того, що може піти не так з цим гачком або сценарієм?

Відповіді:


179

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

#!/bin/sh
cd /path/to/working-copy/ || exit
unset GIT_DIR
git pull repo branch

exec git-update-server-info

18
Я можу підтвердити, скасування GIT_DIRпроблеми вирішує проблему.
jmtd

16
Для бажаючих зрозумійте, чому: це тому, що git використовує змінну GIT_DIRзамість PWD. cd-ing змінює PWDне те GIT_DIR. Там повинен бути запасний варіант в мерзотника від GIT_DIRдо PWDякщо перший не доступний.
зупа

Питання полягає в тому, чому git повинен вважати за необхідне це робити для скрипта підключення (встановити GIT_DIR так, щоб навіть сценарій мав 'cd' в іншому місці 'git whatever' все одно працюватиме)? Я особисто вирішив би, що git не робить такого роду магії.
Steven Haryanto

2
Причиною цього є те, що Git застосовує деякі змінні середовища до всіх основних команд git.
Кейсі

Що трапляється, коли виникає конфлікт злиття після git pull?
лолололол ол


0

Незважаючи на те, що встановлений GIT_DIR просто працює.

проблема виникає, коли ви неправильно встановили GIT_DIR в іншому місці.

Ви можете просто додати, що замість цього: GIT_DIR = .git / Це буде працювати


0

У моєму випадку я вказав робоче дерево, і це порушує деякі команди, наприклад pull(або точніше fetch).

Щоб скасувати робоче дерево, якщо воно є у вашому конфігу git, виконайте такі дії:

git config --unset core.worktree

(Є й інші способи встановлення робочого дерева)

Важливо зазначити,

Це майже не змінює цієї проблеми, якщо ви самі не викопали цю діру навколо себе, спочатку використовуючи спеціальне робоче дерево.

Стьоб:

Для мене це означає, що внутрішні git використовують шляхи щодо робочого дерева + .git/в деяких випадках. З мого досвіду, робочі дерева не підтримуються взагалі, за винятком найважливіших частин git. Я не грунтовно експериментував, Git, мабуть, поводився б, якби я правильно встановив те, що правильно налаштовано змінну конфігурації каталогу git, з чим я не грав.


-1

Можливо, у вас проблема з дозволами. Я не впевнений, як ви налаштували ваше відкрите репозиторій git, але якщо він працює під gitкористувачем, переконайтеся, що gitкористувачеві дозволено виконувати git pullв каталозі вашого проекту.

Необов’язково спробуйте це, щоб з’ясувати, яким користувачем ви користуєтесь під час запуску гачка:

echo `whoami`

якщо я заходжу на сервер як користувач git, я без проблем можу використовувати git pull у своєму каталозі проекту. Я вважаю, що саме користувач повинен виконувати сценарій. Я можу спробувати додати рядок whoami до сценарію, але куди йде вихід з цього сценарію, коли він виконується як хук? Можливо, мені потрібно надсилати ці результати у файл журналу, а не повторювати?
Ty W

Що робить echo `whoami`, що whoamiні?
Christoffer Hammarström

Вихід до stdout із скриптового сценарію видно пульту, який виконує дію. Або, іншими словами, якщо ви скажете "git push", вихід із гачка на пульті відобразиться у вашому stdout.
ebneter

так, помітив, що коли я грався у речі. дуже зручно :)
Ty W
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.