2013-05-20 11 views
33

Zum Beispiel können Sie eine git remote --verbose tun und git zeigt alle Fernbedienungen, die Sie in Ihrem Projekt haben, zeigt git branch alle Zweige und signalisieren den aktuellen Zweig, aber wie man alle Unterbäume auflistet, ohne einen destruktiven Befehl? git subtree wird die Anwendungsbeispiele geben, aber nichts auflisten. Teilbaum haben nur add, pull, push, split, merge.Wie kann ich die Git-Teilbäume auf der Wurzel auflisten?

+0

Entschuldigen Sie mich, aber was ist ein Teilbaum? Running 'git subtree' gab mir' git: 'subtree' ist kein git-Befehl.' – Jokester

+1

Sie müssen Teilbaum auseinander installieren, es ist nicht mit Git im Moment gebündelt. http://engineeredweb.com/blog/how-to-install-git-subtree/. Teilbaum ist eine viel bessere Alternative zu Submodulen :) – pocesar

+1

@pacesar git Teilbaum [wurde verschmolzen] (https://github.com/apenwarr/git-subtree/blob/master/THIS-REPO-IS-OBSOLETE) zur Hauptlinie Git, und es ist seit Version 1.7.11 – 1615903

Antwort

36

Es gibt keine explizite Möglichkeit, dies zu tun (zumindest vorerst), die nur hier verfügbaren Befehle aufgeführt (wie Sie selbst bemerkt, aber hier ist eine Referenz für zukünftige Suchende): https://github.com/git/git/blob/master/contrib/subtree/git-subtree.txt

Ich ging durch den Code (im Grunde all dieser Mechanismus ist eine große Shell-Skript-Datei), die gesamte Verfolgung erfolgt durch Commit-Nachrichten, so dass alle Funktionen verwenden Mechanismus mit vielen grep -ing, um seine eigenen Daten zu finden.

Seit Teilbaum einen Ordner mit dem gleichen Namen im Stammordner des Repositorys haben müssen Sie diese ausführen können die Informationen, die Sie (in Bash-Shell) erhalten möchten:

git log | grep git-subtree-dir | tr -d ' ' | cut -d ":" -f2 | sort | uniq 

Nun doesn diese‘ t prüfen, ob der Ordner vorhanden ist oder nicht (Sie es und der Teilbaum Mechanismus löschen können nicht wissen), also hier, wie Sie nur die bestehenden Teilbäume auflisten können, wird dies im Repository in einem beliebigen Ordner arbeiten:

git log | grep git-subtree-dir | tr -d ' ' | cut -d ":" -f2 | sort | uniq | xargs -I {} bash -c 'if [ -d $(git rev-parse --show-toplevel)/{} ] ; then echo {}; fi' 

Wenn du wirklich dazu in der Lage bist, schlage es Git Jungs vor, sie in die nächsten Versionen aufzunehmen :)

+1

der Befehl, den du gibst, funktioniert nicht für mich. git log | grep git-subtree-dir liefert keine Ergebnisse (git Version 1.7.9.5) – FlipMcF

+2

+1. @procesar, FlipMcF: Dies ist für mich in "git bash" unter Windows "git version 1.8.5.2.msysgit.0" funktioniert. Der Grund, warum es funktioniert, ist, dass "git subtree" Befehl mehrere Zeilen beginnend mit "git-subtree-" für die Commit-Nachricht und eine der Zeilen sieht wie folgt aus: "git-subtree-dir: you-prefix-folder". Für "prof" - schau einfach auf die Ausgabe von "git log" direkt nach dir Führen Sie "git subtree add ..." aus, und Sie sehen diese Zeilen. –

+1

@FlipMcF, offizielle Teilbaumunterstützung wurde in 1.7 hinzugefügt.11, also benutze ich ein altes und freistehendes Unterbaummodul, das nicht als moderne Version funktioniert. Sie können entweder das aktuellste Teilbaum-Skript installieren (siehe [hier] (http://log.pardus.de/2012/08/modular-git-with-git-subtree.html)) oder Ihre gesamte git-Installation aktualisieren. –

21

auf Sagi Illtus' answer Anknüpfend, fügen Sie den folgenden Alias ​​zu Ihrem ~/.gitconfig

[alias] 
    ls-subtrees = !"git log | grep git-subtree-dir | awk '{ print $2 }'" 

Dann können Sie git ls-subtrees aus der Wurzel Ihrer Repository alle Teilbaum Pfade zeigen:

$> cd /path/to/repository 
$> git ls-subtrees 
some/subtree/dir 
+0

Das wäre toll außer es spuckt Duplikate in meinem Repo aus - wahrscheinlich, weil ich einen Teilbaum gelöscht und neu hinzugefügt habe. Wenn ich tatsächlich weiß, was ich mache, ist das hilfreich ;-) –

+0

@MattBracewell Sieh dir 'uniq' an. Sie können den Alias ​​aktualisieren, um ihn zu pipen, oder 'git ls-subtrees | uniq' – kenchilada

+2

Oder verwenden Sie' sort -u' und haben Sie die Verzeichnisse in alphabetischer Reihenfolge als Bonus! – Potherca

Verwandte Themen