假设我有一个名为alice
的git远程控制器。这个遥控器有数百个分支机构,但我只取几根树枝从它,使用git fetch alice some-branch
,git fetch alice another-branch
等如何从远程仅从本地拥有的分支中获取(与远程部分同步)
现在,我想从alice
只是我已经有分支机构同步 - 我不想取他们全部。我该怎么做?
假设我有一个名为alice
的git远程控制器。这个遥控器有数百个分支机构,但我只取几根树枝从它,使用git fetch alice some-branch
,git fetch alice another-branch
等如何从远程仅从本地拥有的分支中获取(与远程部分同步)
现在,我想从alice
只是我已经有分支机构同步 - 我不想取他们全部。我该怎么做?
我没有找到一个简单的解决方案,但这个工作对我来说:
git branch -ar | sed 's|^[ \t]*||' | grep -e '^alice/' | sed 's|alice/||' | xargs git fetch alice
说明:
.bashrc
分支的名称git fetch
,或作为一般的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}"
}
我宁愿在我的回购协议的本地配置设置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
只会获取指定的分支。