Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
试图理解git fetch_Git - Fatal编程技术网

试图理解git fetch

试图理解git fetch,git,Git,假设位于$repo_URL的repo有多个分支,包括一个名为dev的分支。现在,假设我一个接一个地运行以下命令 % git clone $REPO_URL --branch dev wd % cd wd % git branch -a * dev remotes/origin/HEAD -> origin/master remotes/origin/dev remotes/origin/issue6 remotes/origin/issue26 remotes/orig

假设位于
$repo_URL
的repo有多个分支,包括一个名为
dev
的分支。现在,假设我一个接一个地运行以下命令

% git clone $REPO_URL --branch dev wd
% cd wd
% git branch -a
* dev
  remotes/origin/HEAD -> origin/master
  remotes/origin/dev
  remotes/origin/issue6
  remotes/origin/issue26
  remotes/origin/issue30
  ...
  remotes/origin/issue709
  remotes/origin/issue712
  remotes/origin/issue716
  remotes/origin/master
在这一点上我必须做些什么,以便对于表单
remotes/origin/X
的每个分支,都有一个本地分支
X
与之完全匹配?我的意思是,以下两个命令将产生相同的输出:

% git rev-parse remotes/origin/X
% git rev-parse X
另外,
git branch-a
的输出结果如下:

* dev
  issue6
  issue26
  issue30
  ...
  issue709
  issue712
  issue716
  master
  remotes/origin/HEAD -> origin/master
  remotes/origin/dev
  remotes/origin/issue6
  remotes/origin/issue26
  remotes/origin/issue30
  ...
  remotes/origin/issue709
  remotes/origin/issue712
  remotes/origin/issue716
  remotes/origin/master

您不需要为此
fetch
,因为您在克隆回购协议时已经这样做了。您需要的是一个本地分支与每个远程跟踪分支相匹配,为此,您可以使用
checkout

git checkout -b issue6 origin/issue6
因此,您可以使用一个脚本来循环所有远程分支并将其签出

如注释中所述,git的最新版本可以使用更简单的命令:

git checkout issue6

shell for循环将完成此操作:

for BRANCH in $(git branch -r | grep -v HEAD) # list of remote branches (excluding HEAD)
do
    git checkout --track ${BRANCH}
done

一个简单的shell脚本应该能够在短时间内做到这一点……问题不在于如何实现迭代。不过,这不是您使用的任何解决方案都必须做到的吗?在git的最新版本中,
git checkout issue6
也会做同样的事情。因此,要创建分支,需要将其签出?@kjo——上述两个命令都是创建本地分支然后将其签出的语法糖。分支的实际创建仍然是
git branch
@kjo,如果您想在不使用签出的情况下创建本地分支,可以使用
git branch--track issue6 origin/issue6