2016-11-24 128 views
7

我有以下分支在遠程原點。git指定前綴提取分支

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 

我想獲取以ft_d開頭的分支。我怎樣才能達到這個git fetch? 我的Git版本是1.7.9.5。

回答

5

由於Git版本2.6,您可以指定部分子(帶簡單的glob風格的匹配)在一個fetch或push refspec中。因此:

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

會做你所要求的。廣義正則表達式是而不是可用,也不是普遍化的格式:只允許匹配兩個固定字符串之間的所有內容的一個特定格式*。 (這裏有些固定字符串可能是空的。通常情況下,後面一半,也就是我們通常取refs/heads/*,不refs/heads/*x得到的只是他的名字在x結束分支。)

如果你的Git是比2.6年紀大了,也沒有簡單的方法來完成一個抓取。您需要循環獲取多個提取,並且您需要進行自己的名稱匹配,也許使用git ls-remote的輸出。

(當然,git fetch origin通常只是把一切結束了,作爲remote.origin.fetch配置一個或多個條目指定的,在大多數情況下,在制約git fetch這樣的小點。您確定要這麼做呢?)

+0

我的Git版本是1.7.9.5。我要更新我的git並會檢查這個。 – dnsh

+0

這工作。由於我是git新手,我無法完全理解這一點。我不得不閱讀https://git-scm.com/book/en/v2/Git-Internals-The-Refspec來理解這個解決方案。 – dnsh

0

我不知道的Git支持獲取一個分支正則表達式,但是,你可以創建一個簡單的腳本,它會爲你:

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

爲簡單起見,我寫了feature1,2,3。我的分支名稱中沒有序列。我更新了我的問題。 – dnsh

0

另一種方式是列表中的遠程分支:

PREFIX='ft_d_feature_' 

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

編輯

實際調用git fetch每個分支:

PREFIX='ft_d_feature_' 

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

EDIT2

另一種方法是創建一個git的別名,你可以在你~/.gitconfig文件中添加它。

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

用法: git fetch-prefix ft_d_feature_