Git - гачок після отримання з git pull "Не вдалося знайти дійсну каталог git"


17

Це дуже дивно, але під час налаштування сховища git та створення гачка після отримання за допомогою:

echo "--initializing hook--"
cd ~/websites/testing
echo "--prepare update--"
git pull
echo "--update completed--"

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

6bfa32c..71c3d2a  master -> master
--initializing hook--
--prepare update--
fatal: Not a git repository: '.'
Failed to find a valid git directory.
--update completed--

тому я запитую себе зараз, як можна змусити гачок оновити клона після отримання?

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

cd ~/websites/testing
git pull

працює без проблем ...

будь-яка допомога з цього приводу була б дуже вдячна

Дуже дякую

Відповіді:


25

Поки гак працює, GIT_DIRі (якщо робоче дерево було визначено явно) GIT_WORK_TREEвстановлюються. Це означає, що ваше тягнення не буде працювати з другим сховищем в каталозі, в якому ви змінилися.

Спробуйте git --git-dir ~/websites/testing/.git --work-tree ~/websites/testing pull; або скасувати репо-локальне середовище git за допомогою цього:

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

Детальніше про ці змінні середовища у man 1 git .


1
Велике спасибі за це Тобу, воно справді працює, я також перевірю більше інформації про нього. Ура
zanona

6

Одне, що я пережив, - це те, що використання post-updateгачка '--git-dir' чудово працювало, але git все ще скаржився на відсутність робочого дерева (незважаючи на використання '--work-tree')

Словом, це не спрацювало:

git --git-dir /path/to/websites/testing/.git --work-tree /path/to/websites/testing pull

тоді як це спрацювало:

cd /path/to/websites/testing
git --git-dir /path/to/websites/testing/.git pull


1

Це не працює?

cd /home/smb/websites/testing
env -i git pull

Відредаговано

Ще краще

cd /home/smb/websites/testing
unset GIT_DIR
git pull

0

Ви пробували з повним шляхом замість ~?

cd /home/smb/websites/testing
git pull


0

Перша рекомендована відповідь правильна - коли гак працює GIT_DIR тощо. Однак, якщо ви хочете мати можливість використовувати скрипт в іншому сховищі, то цей метод виявляється недоліком, оскільки він жорстко кодує скидання GIT_DIR. Як випливало з них, інший спосіб - видалити змінну, використовуючи env наступним чином: env -i git reset --hard Очевидно, яка команда, яку ви виконуєте там, залежить від вас - це лише біт 'env -i', який важливий біт .

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