git指定前缀提取分支
我有以下分支在远程原点。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