我有以下分支在遠程原點。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。
我有以下分支在遠程原點。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。
由於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
這樣的小點。您確定要這麼做呢?)
我不知道的Git支持獲取一個分支正則表達式,但是,你可以創建一個簡單的腳本,它會爲你:
for i in {1..3};
do
git fetch origin ft_d_feature$i
done
爲簡單起見,我寫了feature1,2,3。我的分支名稱中沒有序列。我更新了我的問題。 – dnsh
另一種方式是列表中的遠程分支:
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_
我的Git版本是1.7.9.5。我要更新我的git並會檢查這個。 – dnsh
這工作。由於我是git新手,我無法完全理解這一點。我不得不閱讀https://git-scm.com/book/en/v2/Git-Internals-The-Refspec來理解這個解決方案。 – dnsh