2016-11-08 1 views
1

Ich schreibe ein Skript, das ein Git Repo nimmt, und es führt einen Test für jeden Remote-Zweig. Ich verwende den folgenden, um die Namen der entfernten Niederlassungen zu erhalten:git zeigen entfernte Zweige, und HEAD und andere symbolische Referenzen herausfiltern

$ git branch -l -r 
    remotes/origin/HEAD -> origin/master 
    remotes/origin/master 
    remotes/origin/br1 

aber ich bekomme auch symbolische Referenzen, wie HEAD. Wie kann ich HEAD und andere symbolische Referenzen herausfiltern?

+1

'git branch -l -r | grep -v - '->''? – Leon

+0

sicher, aber dieser Hack ist sehr unzuverlässig. Wie man alle "Ausnahmen" kennt ... –

+0

Nur eine Idee: Haben Sie den .git-Ordner überprüft? Vielleicht finden Sie nützliche Dateien mit Informationen über Referenzen. Kapitel 10 könnte nützlich sein: https://git-scm.com/book/en/v2 – clinical

Antwort

2

Jedes Mal, wenn Sie mit einem Satz von Referenzen arbeiten möchten, ist der korrekte (scriptfähige) Plumbing-Befehl wahrscheinlich git for-each-ref.

In diesem Fall zum Beispiel:

$ git for-each-ref --format '%(refname)' refs/remotes | 
> while read ref; do 
>  if git symbolic-ref -q $ref > /dev/null; then 
>   echo sym $ref 
>  else 
>  echo reg $ref 
> fi 
> done 
sym refs/remotes/origin/HEAD 
reg refs/remotes/origin/maint 
reg refs/remotes/origin/master 
reg refs/remotes/origin/next 
reg refs/remotes/origin/pu 
reg refs/remotes/origin/todo 

die symbolischen Referenzen vollständig zu überspringen, können Sie die if/then ändern Klausel if ! git symbolic-ref -q $ref > /dev/null; then (und legen Sie die else vollständig). Um etwas Interessantes mit den symbolischen Referenzen und ihren Zielen zu tun, speichern Sie die Ausgabe von git symbolic-ref in einer Variablen, anstatt sie an /dev/null umzuleiten (aber behalten Sie die -q, um zu verhindern, dass sie für alle nicht symbolischen Referenzen an stderr klagt).

Mit dem Befehl for-each-ref können Sie mit jeder sinnvollen Teilmenge von Referenzen arbeiten, einschließlich bestimmter Fernbedienungen oder aller lokalen Verzweigungen().