2017-11-23 10 views
1

Ich bin gerade dabei, zu restrukturieren, wie unser unternehmen entwicklungsprozesse abwickelt. Da es für uns immer noch ein Problem ist, ssh in den Server zu schieben, um Dateien/Ordner von DEV auf STAGE/PRODUCTION Server zu befördern, dachte ich, es wäre eine gute Idee, die git Umgebung so einzurichten, dass wir sie einfach zusammenführen können Dev-Zweig in den Stage-Zweig, um eine "Promotion" durchzuführen.git checkout filialen für entwicklung/staging/produktion

Dafür würden wir 3 verschiedene Zweige in unseren Projekten benötigen, die zu verschiedenen Positionen auf dem Server auschecken, wenn ein neuer Push empfangen wird.

Wir haben 3 Ordner auf unserem Server, die die Daten für unsere 3 verschiedenen Umgebungen enthalten (DEV - STAGE - PROD). Dann würde das Schema aussehen etwas wie folgt aus:

Branch checkout schema

ich den GIT als nackte repos einrichten und ich frage mich, ob etwas Ähnliches mit git möglich ist.

Ich werde für jede Hilfe dankbar sein, die Sie mir zur Verfügung stellen können! : D

+0

Dies ist ein sehr Standard-Setup. Was ist deine Frage? –

+0

Nun, ich wusste diese Lösung noch nicht, deshalb fragte ich. Carlo hat mir dafür eine großartige Lösung geliefert! –

Antwort

1

die Idee ist es, ein post-receive hook auf dem Server zu verwenden und eine Zwang (-f Option) Kasse in einem bestimmten Verzeichnis

Setzen Sie eine Kasse in einem bestimmten Arbeitsverzeichnis mit der --work-tree=/path/ Option erhalten können .. .

ein Beispielcode durch this Gist angepasst (auf dem blanken repos auf dem Server als Datei hooks/post-receive mit Ausführungs Bitsatz gespeichert wird) könnte sein:

#!/bin/bash 
echo '--- --- --- --- --- --- --- --- --- --- ---' 
echo 'Deploying site...' 
echo '--- --- --- --- --- --- --- --- --- --- ---' 

if ! [ -t 0 ]; then 
    read -a ref 
fi 

IFS='/' read -ra REF <<< "${ref[2]}" 
branch="${REF[2]}" 

# Master Branch 
if [ "PROD" == "$branch" ]; then 
    git --work-tree=/path/to/public/PROD checkout -f $branch 
    echo 'Changes pushed to production site' 
fi 

# Stage Branch 
if [ "STAGE" == "$branch" ]; then 
    git --work-tree=/path/to/public/STAGE checkout -f $branch 
    echo 'Changes pushed to stage site' 
fi 

# Development Branch 
if [ "DEV" == "$branch" ]; then 
    git --work-tree=/path/to/public/DEV checkout -f $branch 
    echo 'Changes pushed to dev site' 
fi 

echo '--- --- --- --- --- --- --- --- --- --- ---' 

ein anderes mögliches sintax für die Kasse ist

GIT_WORK_TREE=/path/to/test/site git checkout -f 
+0

Vielen Dank, dass Sie mir dabei geholfen haben. Ich war ein bisschen blind beim Hinzufügen meines post-receive-Hooks;) ... Es kam mir nicht in den Sinn, dass Sie hier ein vollständiges Shellscript verwenden würden, da ich nie etwas anderes als die Standard-Work-Tree-Einstellungen verwendete. –

+0

perfekt ... glücklich, nützlich zu sein –

+0

BTW ... funktioniert wie ein Charme! ;) –