2016-11-24 9 views
7

Ich habe folgende Zweige in remote Herkunft.git fetch Zweige mit spezifizierten Präfix

ft_d_feature_abc 
ft_d_feature_xyz 
ft_d_feature_lam 
ft_d_feature_ton 
ft_m_feature_mak 
ft_m_feature_echo 
ft_m_feature_laa 
ft_m_feature_pol 

Ich möchte Zweige holen, die mit ft_d beginnend werden. Wie kann ich dies mit git fetch erreichen? Meine Git Version ist 1.7.9.5.

Antwort

5

Seit Git Version 2.6, Sie Teilstrings angeben können (mit einfaches glob-style matching) in einem fetch oder push refspec. Also:

git fetch origin 'refs/heads/ft_d*:refs/remotes/origin/ft_d*' 

würde tun, was Sie verlangen. Verallgemeinerte reguläre Ausdrücke sind nicht verfügbar, noch verallgemeinerte Globs: nur der eine spezifische Fall von *, der alles zwischen zwei festen Zeichenketten zusammenbringt, ist erlaubt. (Einige festen Strings hier können leer sein. Normalerweise ist die hintere Hälfte, das heißt, wir in der Regel refs/heads/* holen, nicht refs/heads/*x nur Zweige, dessen Namen endet in x zu erhalten.)

Wenn Ihr Git älter ist als 2,6, gibt es keine einfache Möglichkeit, dies in einem Abruf zu tun. Sie benötigen mehrere Abrufe in einer Schleife, und Sie müssen Ihren eigenen Namensabgleich durchführen, möglicherweise unter Verwendung der Ausgabe von git ls-remote.

(Natürlich wird git fetch origin normalerweise bringen nur alles über, wie in dem remote.origin.fetch Konfigurationseintrag oder Einträgen angegeben, und in den meisten Fällen macht es wenig Sinn in beschränke git fetch auf diese Weise. Sind Sie sicher, dass Sie stören wollen?)

+0

Meine Git Version ist 1.7.9.5. Ich werde mein Git aktualisieren und werde das überprüfen. – dnsh

+0

Das funktioniert. Da ich neu bei Git bin, konnte ich das nicht vollständig verstehen. Ich musste https://git-scm.com/book/en/v2/Git-Internals-The-Refspec lesen, um diese Lösung zu verstehen. – dnsh

0

Ich bin nicht sicher, Git unterstützt reguläre Ausdrücke für einen Zweig zu holen, jedoch können Sie ein einfaches Skript erstellen, das es für Sie tut:

for i in {1..3}; 
do 
    git fetch origin ft_d_feature$i 
done 
+0

der Einfachheit halber habe ich feature1,2,3. In meinen Zweignamen gibt es keine Reihenfolge. Ich habe meine Frage aktualisiert. – dnsh

0

Ein anderer Weg ist die Liste Ihrer Remote-Niederlassungen:

PREFIX='ft_d_feature_' 

for BRANCH in $(git branch | cut -c 3-); do 
    if [[ $BRANCH = $PREFIX* ]] ; then 
     echo $BRANCH; 
    fi 
done 

bearbeiten

nennen, tatsächlich git fetch für jeden Zweig:

PREFIX='ft_d_feature_' 

for BRANCH in $(git branch | cut -c 3-); do 
    if [[ $BRANCH = $PREFIX* ]] ; then 
     git fetch origin $BRANCH 
    fi 
done 

EDIT2

Eine andere Möglichkeit, ein Git-Alias ​​erstellen, können Sie es in Ihrem ~/.gitconfig Datei hinzufügen können.

[alias] 
    fetch-prefix = "!f(){ for BRANCH in $(git branch | cut -c 3-); do case $BRANCH in $1*) git fetch origin $BRANCH; esac; done; }; f" 

Verbrauch: git fetch-prefix ft_d_feature_