2016-04-08 17 views

Antwort

8

Die stabilste Lösung wäre es einfach ausfallen zu lassen.

Sie können so etwas wie tun:

if [ ! -d "$FOLDER" ] ; then 
    git clone "$URL" "$FOLDER" 
fi 

aber das wäre anfällig Bedingungen zu fahren.

+1

Ich mache mir keine Sorgen wegen der Rennen Bedingungen. Aber ich hätte es interessant gefunden, wenn es eine Kontrolle darüber gäbe, ob das Verzeichnis tatsächlich das git ist (indem ich git remote oder etwas anderes ansehe). Ein 'mkdir -p'-ähnliches Verhalten. Danke für deine Antwort –

+0

@AugustinRiedinger Ja, ich habe auch die Manpage durchsucht, aber es sieht so aus, als ob es nicht .. – hek2mgl

0

Sie sagen uns nicht, warum es schon da sein könnte oder irgendeinen Kontext.

würde ich sehr gerne hinzufügen, ein [ -e $folder ] && rm -rf $folder (sicherstellen, dass $folder gesund ist) vor dem git clone weil ich nicht meine Software alle alten Ordner verwenden möchten, die nur um dort zu liegen kommt in wer weiß, welcher Zustand ...

+0

Der 'rm -rf' Ansatz ist interessant. Im Idealfall wird die Clone-Operation jedoch nicht wiederholt, wenn der Ordner existiert und identisch ist. –

+0

Nun, Sie können nicht wissen, ob der Ordner derselbe ist. Was ist, wenn der Ordner vorhanden ist, aber eine sehr alte Version des Repositorys enthält? Oder ist auf dem falschen Ast? – AnoE

1

git clone $url || true würde shell running mit set -e nicht auf git clone fehlgeschlagen haben.

Wenn dies nicht das ist, was Sie wollen, sollten die vorgeschlagenen Lösungen mit expliziten Tests für das bereits vorhandene Zielverzeichnis funktionieren.

Das einzige Problem mit ihnen ist, dass Sie Git Ansatz, um herauszufinden, seinen Namen simulieren müssen.

So etwas sollte funktionieren:

url=git://host/path/name.git 
last=${url##*/} 
bare=${last%%.git} 
test -e "$bare" || git clone "$url" 

Those "Tricks" mit ## und %%standard featues of the "parameter expansion" rules of POSIX shells sind.

+0

mit '|| True' ist ein wirklich netter Trick –

1

Ein bisschen spät zur Party, aber ich etwas ähnliches tue, aber ich will den Repo, um sicherzustellen, auf dem neuesten Stand ist, wenn es so existiert bereits auf der obigen Antwort zu erweitern, wenn die Repo bereits vorhanden Sie dann sicherstellen, ziehen könnten es ist auf dem neuesten Stand.

if [ ! -d "$FOLDER" ] ; then 
    git clone "$URL" "$FOLDER" 
else 
    cd "$FOLDER" 
    git pull "$URL" 
fi 
Verwandte Themen