/ / git-dir nie działa, ponieważ ścieżka nie jest rozpoznawana - git

git-dir nie działa, ponieważ ścieżka nie jest rozpoznawana - git

Chcę użyć zautomatyzowanego skryptu push przy użyciu git i skonfigurować mój hak po odebraniu:

#!/bin/bash
while read oldrev newrev ref
do
if [[ $ref =~ .*/master$ ]];
then
echo "Master ref received. Deploying master branch to production server..."
git --work-tree=/var/www/MFDispo --git-dir=~/Documents/MFDispo/.git checkout -f
else
echo "Ref $ref successfully received. Doing nothing. Only the master branch may be deployed on this server."
fi
done

Ale nacisk nie działa:

remote: Master ref received. Deploying master branch to production server...
remote: fatal: Not a git repository: "~/Documents/MFDispo/.git"

Ale folder na moim kliencie zawiera repozytorium git. Widzę folder w strukturze folderów, a system git działa tak, jak go używam podczas kodowania i zatwierdzania.

Czy muszę inaczej określać ścieżkę?

AKTUALIZACJA

Po zmianie ścieżki dla --git-dir do $HOME/Documents... ten sam błąd pojawia się, ale widzę teraz również ścieżkę, którą przeszukuje. To jest /home/sesc/Documents.... Ale to jest na moim serwerze produkcyjnym. Myślałem, że na kliencie szukana jest ścieżka, wpisując ścieżkę do pliku?

AKTUALIZACJA 2 Tak więc teraz próbowałem następujące:

  1. Klonowanie repozytorium na moim serwerze produkcyjnym początkowo
  2. Zmiana --git-dir na: var/www/MFDispo (jest to ścieżka na serwerze produkcyjnym)
  3. Ponowne uruchomienie tego samego skryptu

Teraz pojawia się błąd: remote: error: insufficient permission for adding an object to repository database objects

Czy muszę chmod folder, zanim będę mógł zacząć? Przynajmniej wydaje się to lepsze niż wcześniej!

Dziękuję Ci

Odpowiedzi:

0 dla odpowiedzi № 1

~ rozwija się tylko do katalogu domowego, gdy znajduje się na początku słowa powłoki (mniej więcej, gdy znajduje się na początku linii lub jest poprzedzone białymi znakami). Tak więc w --git-dir=~/Documents/MFDispo/.git, ~ nie jest rozwinięty, więc Git szuka katalogu dosłownie nazwanego ~, które, jak zakładam, nie istnieje, albo wypisz pełną ścieżkę do katalogu domowego, albo zastąp ją zmienną powłoki $HOME:

--git-dir=$HOME/Documents/MFDispo/.git

0 dla odpowiedzi nr 2

Nie sądzę, że przedrostek ~ jest rozszerzanyodpowiednio w kontekście, w którym go używasz; jest rozszerzany przez bash tylko wtedy, gdy bash rozpoznaje go jako początek słowa, a nie w środku argumentu.

Zamiast tego zamień $ {HOME} na odpowiedni wiersz:

            git --work-tree=/var/www/MFDispo --git-dir=${HOME}/Documents/MFDispo/.git checkout -f