2013-03-28 3 views
9

Ich habe einen Ordner - 'Repos' - der die Repos enthält, an denen ich interessiert bin. Diese wurden von Bitbucket geklont, aber ich denke, Github könnte auch eine Quelle sein.Alle Repos in einem Ordner aktualisieren?

Repos 
    - music-app 
    - elephant-site 
    - node-demo 

Gibt es ein git Befehl, die ich verwenden kann, die durch jeden Ordner in Repos Schritte und sieht, ob es neue Commits auf dem Server, und der Download der neuen Sachen? Und wenn es lokal neue Commits gibt, laden Sie diese hoch.

+1

Ist das ein Duplikat http://stackoverflow.com/questions/3497123/run auszuführen -git-pull-over-alle-Unterverzeichnisse? – Dirk

Antwort

21

Try this:

cd repos 
find . -maxdepth 1 -type d -exec sh -c '(cd {} && git pull)' ';' 
+0

Vorbehalt (vielleicht eine offensichtliche): Das funktioniert auf * nix oder GitBash (und vielleicht Mac?), Aber nicht die Windows-Befehlszeile. –

+0

Ich hätte erwähnen sollen, ich bin auf einem Mac. ls foreach 'git pull' gibt nur "fatal: Kein git-Repository (oder eines der übergeordneten Verzeichnisse) zurück: .git" ... muss mein Repos-Ordner auch git repo sein? – cannyboy

+0

@cannyboy Ah, habe den Befehl aktualisiert. –

0

mehrere repos zu erhalten, können Sie git Submodul verwenden.

Verwenden Sie git submodule add, um ein Repo als Submodul hinzuzufügen und git submodule foreach git pull zu verwenden, um die Repos zu aktualisieren.

Diese Methode ist, als ob Sie ein Superprojekt mit mehreren Git-Projekten haben.

+0

Das ist ** nicht ** wie git Submodule arbeiten. Die Aktualisierung des Submoduls zieht bestimmte Commits aus dem Histor. Sie müssen noch 'git submodule foreach git pull' machen, um sie zu aktualisieren. –

+0

Sie haben Recht. Ich vermisse das git Submodul foreach git pull Befehl. – wmfairuz

0

Was ich habe, ist ein scriptlet, die etwas tut, wie:

for d in * 
cd $d 
git pull 
cd .. 

(Ja, es hat ein paar zusätzlichen Schnickschnack, dass ich ein paar hg repos habe, und andere, die ich in git verwaltet aus . SVN upstream)

4

für Windows, dies sollte es über eine Eingabeaufforderung für Sie tun:

cd c:\repos 
for /d %a in (*.*) do cd c:\repos\%a && git pull 

Sobald Sie wieder auf die GitHub Client zu gehen, sollten Sie die Updates sehen.

+1

'für/d% a in (*. *) Tun CD% CD% \% a && git pull' das sollte auch funktionieren, nur keine Notwendigkeit, einen Pfad mit'% CD %' zu definieren – Kuncevic

2

gitfox ist ein Werkzeug Befehl auf allen subrepo

npm installieren gitfox -g

g Pull