我不想从原点获取每个分支,因为有很多分支。我只想跟踪一些(例如master
)和我的分支(在my_name
子目录下组织)。我可以做到以下几点:
$ git fetch origin refs/heads/my_name/*:refs/remotes/origin/my_name/* refs/heads/master:refs/remotes/origin/master refs/heads/some_branch:refs/remotes/origin/some_branch
我想将refspecs的上述“set”指定为git fetch
的默认值。我试过了
$ git config remote.origin.fetch refs/heads/my_name/*:refs/remotes/origin/my_name/*
$ git config --add remote.origin.fetch refs/heads/master:refs/remotes/origin/master
失败了:
$ git config remote.origin.fetch
refs/heads/my_name/*:refs/remotes/origin/my_name/*
error: More than one value for the key remote.origin.fetch: refs/heads/master:refs/remotes/origin/master
我也尝试以下但它也失败了:
$ git config remote.origin.fetch 'refs/heads/my_name/*:refs/remotes/origin/my_name/* refs/heads/master:refs/remotes/origin/master refs/heads/some_branch:refs/remotes/origin/some_branch'
$ git fetch
fatal: Invalid refspec 'refs/heads/my_name/*:refs/remotes/origin/my_name/* refs/heads/master:refs/remotes/origin/master refs/heads/some_branch:refs/remotes/origin/some_branch'
注意:Git 1.7.11
答案 0 :(得分:34)
您可以在.git/config
中添加以下行,为fetch指定多个refspec:
[remote "origin"]
fetch = refs/heads/my_name/*:refs/remotes/origin/my_name/*
fetch = refs/heads/master:refs/remotes/origin/master
fetch = refs/heads/some_branch:refs/remotes/origin/some_branch
你可以在refspec之前添加前缀+
,如果你想覆盖非快进的引用,就像这样:
[remote "origin"]
fetch = +refs/heads/my_name/*:refs/remotes/origin/my_name/*
fetch = +refs/heads/master:refs/remotes/origin/master
fetch = +refs/heads/some_branch:refs/remotes/origin/some_branch
请注意,不支持部分通配(即不支持a/b/ca*
,但a/b/*
是)。
答案 1 :(得分:9)
要覆盖现有的提取refspec,而无需手动修改.git/config
,您可以根据需要使用--unset-all
后跟多个--add
。
对于问题中所需的refspecs示例,它将是:
$ git config --unset-all remote.origin.fetch
$ git config --add remote.origin.fetch +refs/heads/my_name/*:refs/remotes/origin/my_name/*
$ git config --add remote.origin.fetch +refs/heads/master:refs/remotes/origin/master
然后使用git config --get-all remote.origin.fetch
验证结果。
答案 2 :(得分:4)
注意:如果您想在单个调用中从其他refspec 获取(暂时覆盖在配置中注册的fetch refspec),您可以从Git 2。1(2014年8月)开始。< / p>
commit c5558f8见Junio C Hamano (gitster
):
自引入远程跟踪分支的机会更新以来,在f269048(
fetch
:机会主义更新跟踪参考,2013-05-11)开始,并在v1.8.4时代进行了一些更新,remote.*.fetch
配置总是会启动,即使在命令行上给出了指定要获取内容的refspec,并且无法在每次调用时禁用或覆盖它。教导命令注意
--refmap=<lhs>:<rhs>
命令行选项,这些选项可用于覆盖使用已配置的remote.*.fetch
作为refmap。
这为您提供了新选项:
--refmap=<refspec>
在获取命令行中列出的refs时,使用指定的refspec(可以多次给出)将refs映射到远程跟踪分支,而不是远程存储库的
remote.*.fetch
配置变量的值。
请参阅&#34;配置远程跟踪分支&#34;详情。
(Git&#34;配置远程跟踪分支&#34;部分也可以从Git 2.1开始:参见&#34; Having a hard time understanding git fetch
&#34;)
答案 3 :(得分:1)
回答我自己关于refmap
缺少示例的投诉。这是在不与配置交互的情况下从VSO(Visual Studio Online)检出拉取请求的示例。
$ git fetch --refmap='+refs/pull/*/merge:refs/remotes/origin/pr/*' origin refs/pull/1415/merge
$ git checkout pr/1415