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:
- Klonowanie repozytorium na moim serwerze produkcyjnym początkowo
- Zmiana --git-dir na:
var/www/MFDispo
(jest to ścieżka na serwerze produkcyjnym) - 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