Git - Wie finden Sie alle "unpushed" Commits für alle Projekte in einem Verzeichnis?

8

Ich gewöhne mich endlich an Git und, nach der anfänglichen steilen Lernkurve, muss ich sagen, dass es ziemlich gut ist (ich vermisse nur die einzelnen Dateiexternen, aber das ist eine andere Geschichte). Ich habe jedoch ein Problem, das ich nicht lösen kann: Ich arbeite gerade an einem Dutzend Projekten gleichzeitig. Sie sind alle miteinander verbunden, und ich muss von einem zum anderen springen und hier und da Änderungen vornehmen.

Alles gut bis jetzt, ich kann sie ganz einfach "jonglieren", ich übergebe regelmäßig Änderungen und so weiter. Das Problem ist, dass ich nach mehreren Stunden nicht mehr weiß, welche Projekte ich an das Remote-Repository gesendet habe. Natürlich kann ich in jedes Projektverzeichnis "cd" und den Push-Befehl ausgeben, aber es ist mühsam. Ich habe mich gefragt, ob es einen Weg geben würde, bash zu benutzen, um etwas wie ein git find all unpushed commits in all projects in this directory zu betreiben. Ein solcher Befehl würde von einem Verzeichnis ausgeführt, das nicht ein Git-Repository ist, aber einen Baum aller Projekte enthält.

Die Logik ist einfach, aber die Implementierung scheint ziemlich kompliziert zu sein, auch weil, obwohl das Wurzelverzeichnis alle Projekte enthält, die tatsächlichen Git-Repositories auf jeder Ebene des Startverzeichnisses gefunden werden können. Zum Beispiel:

  • Projektverzeichnis
    • Kunde X
    • project1 (Git Repo)
    • Kunde U
    • project2 (Git Repo)
    • project3
      • somelibrary (Git Repo)
      • Thema (Git Repo)

In diesem Beispiel sind nur fett gedruckte Verzeichnisse Git-Repositories, daher sollte die Prüfung in ihnen ausgeführt werden. Ich bin mir bewusst, dass die Struktur ein wenig unordentlich aussieht, aber es ist eigentlich ziemlich einfach zu handhaben.

Jede Hilfe ist willkommen, danke.

    
Diego 19.09.2012, 16:44
quelle

6 Antworten

5

Sie können ungespeicherte Commits mit git cherry finden, also sollten Sie in der Lage sein, ein Bash-Skript wie

zu schreiben %Vor%

das wird 3 Ebenen von Unterverzeichnissen finden, aber es ist wahrscheinlich nicht sehr schön, es anzuschauen.

BEARBEITEN

Wie Evan vorschlägt, können Sie eine Subshell verwenden, um cd -ing ein Verzeichnis wie zB

zu vermeiden %Vor%

Vielleicht möchten Sie hier einen pwd -Befehl eingeben, um zu sehen, in welcher Datei / welchem ​​Verzeichnis Sie sich befinden ...

    
JKirchartz 19.09.2012, 17:02
quelle
5

Machen Sie die oberste Ebene zu einem Git Repo und machen Sie jedes Projekt zu einem Submodul. Jetzt können Sie

ausführen %Vor%

recursive wird nicht benötigt, wenn Sie in Ihren Projekten keine Submodule haben.

    
Adam Dymitruk 19.09.2012 17:21
quelle
5

Man könnte git Submodule betrachten, aber persönlich finde ich sie nicht angenehm, mit denen man arbeiten kann. Vor einiger Zeit habe ich also ein Skript erstellt, um an einer Sammlung von Git-Repos zu arbeiten: Ссылка

Mit

clustergit können Sie Git-Befehle gleichzeitig auf mehreren Repositorys ausführen. Es ist besonders nützlich, den git-Status rekursiv in einem Ordner auszuführen. clustergit unterstützt git status , git pull , git push und mehr.

    
mnagel 29.06.2016 08:20
quelle
2

Fügen Sie diesen Alias ​​Ihrer .gitconfig -Datei hinzu und dann können Sie git status-all von einem übergeordneten Verzeichnis ausführen, um den Status aller Git-Repositories rekursiv abzurufen.

%Vor%

Siehe auch diesen Beitrag .

    
BrianV 18.11.2015 15:35
quelle
2

Sie können den folgenden One-Liner verwenden, mit dem Sie aus einem Verzeichnis, das kein Git-Repository ist, nach Ihren Anforderungen suchen können. Dadurch werden die absoluten Pfade zu den Git-Repositories aufgelistet, die Commits rückgängig gemacht haben:

%Vor%

Dies funktioniert, indem rekursiv nach .git-Verzeichnissen gesucht wird, und wenn cd im übergeordneten Verzeichnis gefunden wird, welches der git-Projektstamm ist. Führen Sie dann git status und grep für die Phrase "is after of" aus. Wenn dies der Fall ist, wird der Befehl nach & amp; & amp; wird ausgeführt, in diesem Fall der Befehl 'pwd'. Hier können Sie eigene Befehle einfügen (z. B. um die nicht gedrückten Commits anzuzeigen).

Hinweis: funktioniert nur für ungespeicherte Commits auf dem aktiven Zweig

    
Qetesh 28.10.2015 13:03
quelle
1

Die folgenden Befehle unterstützen auch Pfade mit Leerzeichen und drucken nur Verzeichnisse mit einem .git -Unterverzeichnis in ihnen.

Anzahl der nicht gedrückten Änderungen pro Repo (für alle Zweige):

%Vor%

Anzahl nicht festgeschriebener Dateien pro Repo (gestaffelt und nicht im Stapel):

%Vor%

Hinweis git cherry funktioniert nicht, wenn upstream (-u) nicht festgelegt wurde, während git log dies tut.

    
Marinos An 14.06.2017 20:23
quelle

Tags und Links