git 获取具有指定前缀的分支

git fetch branches with specified prefix

我在远程源中有以下分支。

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是否支持正则表达式来获取分支,但是,您可以创建一个简单的脚本来为您完成:

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

自 Git 版本 2.6 起,您可以在获取或推送 refspec 中指定部分子字符串(使用简单的 glob 样式匹配)。因此:

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

会按照你的要求去做。广义正则表达式 可用,广义 globs 也不可用:只有 * 匹配两个固定字符串之间的所有内容的一种特定情况是允许的。 (这里有些固定的字符串可能是空的。通常后半部分是,即我们通常取refs/heads/*,而不是refs/heads/*x,只是取名字以x结尾的分支。)

如果您的 Git 早于 2.6,则没有简单的方法可以一次性完成此操作。您将需要在一个循环中进行多次提取,并且您将需要进行自己的名称匹配,可能使用 git ls-remote.

的输出

(当然,git fetch origin 通常会把 一切都带过来 ,正如在 remote.origin.fetch 配置条目中指定的那样,并且在大多数情况下有以这种方式限制 git fetch 没什么意义。你确定要打扰吗?)

另一种方法是列出您的远程分支:

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

编辑2

另一种方法是创建 git 别名,您可以将其添加到 ~/.gitconfig 文件中。

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

用法: git fetch-prefix ft_d_feature_