【问题标题】:git fetch branches with specified prefixgit fetch 指定前缀的分支
【发布时间】:2017-04-08 15:58:22
【问题描述】:

我在远程有以下分支。

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 git-branch git-fetch


    【解决方案1】:

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

    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 $1*) git fetch origin $BRANCH; esac; done; }; f"
    

    用法: git fetch-prefix ft_d_feature_

    【讨论】:

      【解决方案2】:

      从 Git 2.6 版开始,您可以在 fetch 或 push refspec 中指定部分子字符串(使用简单的 glob 样式匹配)。因此:

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

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

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

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

      【讨论】:

      • 我的 Git 版本是 1.7.9.5。我要更新我的 git 并检查一下。
      • 这行得通。由于我是 git 新手,所以我无法完全理解这一点。我必须阅读 git-scm.com/book/en/v2/Git-Internals-The-Refspec 才能理解这个解决方案。
      【解决方案3】:

      我不确定 Git 是否支持正则表达式来获取分支,但是,您可以创建一个简单的脚本来为您执行此操作:

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

      【讨论】:

      • 为简单起见,我写了 feature1,2,3。我的分支名称中没有序列。我已经更新了我的问题。
      猜你喜欢
      • 2013-08-04
      • 2016-10-31
      • 2018-10-27
      • 2018-12-15
      • 1970-01-01
      • 2012-07-03
      • 1970-01-01
      • 2021-06-27
      • 2017-03-16
      相关资源
      最近更新 更多