如何git从远程获取我本地已经拥有的分支(与远程部分同步)

时间:2016-01-22 13:43:10

标签: git git-fetch

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

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

2 个答案:

答案 0 :(得分: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/*' 只会获取指定的分支。

答案 1 :(得分:0)

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

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

说明:

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

或者,作为可以添加到.bashrc的一般bash函数:

# 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}"
}