Git - hak po otrzymaniu z git pull „Nie udało się znaleźć prawidłowego katalogu git”

17

Jest to bardzo dziwne, ale podczas konfigurowania repozytorium git i tworzenia haka po otrzymaniu za pomocą:

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

hak rzeczywiście działa, ale nigdy nie udaje mu się poprawnie uruchomić git pull:

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

więc zadaję sobie teraz pytanie, jak to możliwe, aby hak zaktualizował klon po otrzymaniu?

w tym przypadku użytkownik uruchamiający procesy jest taki sam, a wszystko jest w folderze użytkownika, więc naprawdę nie rozumiem ... ponieważ jeśli przejdę ręcznie do

cd ~/websites/testing
git pull

działa bez problemu ...

każda pomoc w tym zakresie byłaby bardzo mile widziana

Wielkie dzięki

zanona
źródło

Odpowiedzi:

25

Podczas działania haka GIT_DIRi (jeśli jawnie zdefiniowano drzewo robocze) GIT_WORK_TREEsą ustawione. Oznacza to, że twoje ściąganie nie będzie działać z drugim repozytorium w katalogu, w którym się zmieniłeś.

Spróbuj git --git-dir ~/websites/testing/.git --work-tree ~/websites/testing pull; lub wyłącz środowisko repo-lokalne git za pomocą:

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

Więcej informacji o tych zmiennych środowiskowych w man 1 git .

Tobu
źródło
1
Wielkie dzięki za to Tobu, to naprawdę działa, sprawdzę też więcej informacji na ten temat. Pozdrawiam
zanona
6

Jedną z rzeczy, których doświadczyłem, było to, że użycie post-updatehaka „--git-dir” działało świetnie, ale git wciąż narzekał na brakujące działające drzewo (pomimo użycia „--work-tree”)

Krótko mówiąc, to nie działało:

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

mając na uwadze, że zadziałało:

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


źródło
1

Czy to nie działa?

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

Edytowane

Jeszcze lepiej

cd /home/smb/websites/testing
unset GIT_DIR
git pull
tommasop
źródło
0

Czy próbowałeś z pełną ścieżką zamiast ~?

cd /home/smb/websites/testing
git pull
jedwab
źródło
0

Skrypt jest prawdopodobnie wywoływany /bin/sh, co nie rozumie ~. ~Zamiast tego wypróbuj pełną ścieżkę .

Darren Chamberlain
źródło
0

Pierwsza zalecana odpowiedź jest prawidłowa - gdy uruchomiony jest hak, GIT_DIR itp. Są ustawione. Jeśli jednak chcesz mieć możliwość korzystania ze skryptu w innym repozytorium, ta metoda ma wadę, ponieważ kodowanie twarde resetuje GIT_DIR. Jak sugerowali, innym sposobem jest usunięcie zmiennej za pomocą env w następujący sposób: env -i git reset - twarde Oczywiście to, jakie polecenie tam uruchomisz, zależy od Ciebie - to tylko bit „env -i” jest najważniejszy .


źródło