2016-05-11 17 views
0

So habe ich mehrere Ordner für eine Liste von Subdomains. Jeder Ordner enthält dasselbe Skript, das den Host dynamisch testet und mehrere Konfigurationen lädt.bash script zu git ziehen

So die Liste wächst und CD zu jedem Ordner zu git ziehen wird zu einer langweiligen Aufgabe.

Der Hosting-Service meines Clients ist begrenzt und ich kann dem Host keinen SSH-Schlüssel hinzufügen, damit der Pull "passwortlos" ist, also mache ich den Pull über HTTPS.

Ich bin kein Experte bash aber die grundlegende Schleife wäre:

for dir in /tmp/*/ 
do 
#passwordless pulls 
done 

Hier ist der Haken, muss einige Ordner entwickeln ziehen und andere Hauptzweig ziehen.

+0

Wenn Sie sagen "einige Ordner müssen ziehen, entwickeln und andere ziehen Master", wird es immer der Zweig sein, auf dem sie bereits sind, oder zumindest seine Upstream? d. h. Wird ein einfacher 'git pull'? – Mort

Antwort

1
DEVLIST="list of hosts that pull develop" 
MASTERLIST="list of hosts that pull master" 

for D in ${DEVLIST} 
do 
    cd /tmp/${D} 
    git clone https://my.repo.edu/git/repo.git -b develop --single-branch 
done 

for M in ${MASTERLIST} 
do 
    cd /tmp/${M} 
    git clone https://my.repo.edu/git/repo.git -b master --single-branch 
done 
3
while read repo remote branch rest; do 
    ( cd $repo 
     git pull $remote $branch 
     # do whatever with $rest 
    ) 2>&1 | sed "s#^#$repo: #" & 
done <<EOD 
/path/to/repo origin branch1 
/path/to/another github master 
EOD 

Oder Sie das Zeug in einer Datei speichern, könnte und </path/to/file statt es nach <<EOD inlining.

Dies wird alle Züge parallel abfeuern, wenn Sie viele von ihnen haben, wäre es vielleicht besser, die & am Ende durch eine ; (oder äquivalent hier entfernen) zu ersetzen.

+0

Ihnen fehlt das letzte Trennzeichen in der Substitution 'sed'. Sie können den Schrägstrich nicht als Trennzeichen verwenden, wenn Sie Zeichenfolgen interpolieren, die Schrägstriche enthalten, die (unescaped) im Skript enthalten. – tripleee

+0

Danke, dass Sie auf den fehlenden Terminator hingewiesen haben. Ich glaube nicht, dass ich je von jemandem gehört habe, der einen entfernten Namen mit einem Schrägstrich hinzufügt, aber wenn irgendjemand jemals ein Zeichen als Trennzeichen akzeptiert, wäre '^' wahrscheinlich gut oder ein Steuerzeichen wie '^ A'. – jthill

+0

Uh, du interpolierst '$ repo' in das 'sed'-Skript, das in deinem Beispiel Schrägstriche hat. '| sed "s% ^% $ repo:%" ' – tripleee