【问题标题】:How to git fetch from remote only the branches that I already have locally (partial sync with a remote)如何仅从远程获取本地已拥有的分支(与远程部分同步)
【发布时间】:2016-04-29 03:18:06
【问题描述】:

假设我有一个名为 alice 的 git 遥控器。这个遥控器有数百个分支,但我只从中提取了几个分支,使用git fetch alice some-branchgit fetch alice another-branch 等。

现在,我只想从 alice 同步我已经拥有的分支 - 我不想获取所有分支。我该怎么做?

【问题讨论】:

    标签: git git-fetch


    【解决方案1】:

    我宁愿在我的 repo 的本地配置中设置 specific fetch refspecs,而不是依赖 bash 魔术解析。

    git config remote.alice.fetch 'refs/heads/branch1/*:refs/remotes/origin/branch1/*'
    git config --add remote.alice.fetch 'refs/heads/branch2/*:refs/remotes/origin/branch2/*'
    git config --add remote.alice.fetch 'refs/heads/branch3/*:refs/remotes/origin/branch3/*'
    

    这样,git fetch alice 只会获取指定的分支。

    【讨论】:

      【解决方案2】:

      我没有找到简单的解决方案,但这个对我有用:

      git branch -ar | sed 's|^[ \t]*||' | grep -e '^alice/' | sed 's|alice/||' | xargs git fetch alice
      

      解释:

      • 列出远程分支
      • 删除 git 分支产生的前导空格
      • 只保留从“alice/”开始的分支,并从每个分支名称中删除该前缀
      • 将分支名称传递给git fetch

      或者,作为一个通用的 bash 函数,可以添加到您的.bashrc

      # Usage:
      #  git-sync-remote <remote-name>
      # Example:
      #  git-sync-remote alice
      git-sync-remote(){
        REMOTE_NAME="$1"
        if [ -z "${REMOTE_NAME}" ] ; then
          echo 'You need to provide remote name'
          return
        fi
        git branch -ar | sed 's|^[ \t]*||' | grep -e "^${REMOTE_NAME}/" | sed "s|${REMOTE_NAME}/||" | xargs git fetch "${REMOTE_NAME}"
      }
      

      【讨论】:

        猜你喜欢
        • 2022-11-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-02
        • 2014-08-09
        • 2013-06-09
        • 2015-04-02
        相关资源
        最近更新 更多