我不想从原点获取每个分支,因为有很多分支.我只想跟踪一些(例如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
Run Code Online (Sandbox Code Playgroud)
我想指定上面的"set"refspecs作为默认值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
Run Code Online (Sandbox Code Playgroud)
它失败:
$ 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
Run Code Online (Sandbox Code Playgroud)
我也尝试以下但它也失败了:
$ 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'
Run Code Online (Sandbox Code Playgroud)
注意:Git 1.7.11
Tux*_*ude 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
Run Code Online (Sandbox Code Playgroud)
您可以+
在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
Run Code Online (Sandbox Code Playgroud)
请注意,不支持部分通配(即a/b/ca*
不支持,但是a/b/*
).
小智 10
要覆盖现有的fetch 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
Run Code Online (Sandbox Code Playgroud)
然后git config --get-all remote.origin.fetch
用来验证结果.
注意:如果您想在一次调用中从不同的 refspec 获取(暂时覆盖配置中注册的 fetch refspec),您可以从 Git 2.1(2014 年 8 月)开始执行此操作。
请参阅Junio C Hamano提交的c5558f8 ( ):gitster
自从引入远程跟踪分支的机会更新以来,从f269048左右开始(
fetch
:机会更新跟踪参考,2013-05-11),并在 v1.8.4 时代进行了一些更新,即使要指定 refspec,配置remote.*.fetch
也始终会启动要获取的内容是在命令行上给出的,并且无法在每次调用时禁用或覆盖它。教命令注意
--refmap=<lhs>:<rhs>
可用于覆盖配置remote.*.fetch
为引用映射的命令行选项。
这给了你新的选择:
--refmap=<refspec>
Run Code Online (Sandbox Code Playgroud)
当获取命令行上列出的引用时,使用指定的引用规范(可以多次给出)将引用映射到远程跟踪分支,而不是
remote.*.fetch
远程存储库的配置变量的值。
有关详细信息,请参阅“配置的远程跟踪分支”部分。
(Git“配置的远程跟踪分支”部分也可以追溯到 Git 2.1:请参阅“很难理解git fetch
”)
在 Git 2.25.1(2020 年 2 月)中,“git fetch --refmap=”选项有了更好的文档。
请参阅Derrick Stolee ( )提交的 b40a502(2020 年 1 月 21 日)。(由Junio C Hamano 合并 -- --在提交 4b69f29中,2020 年 1 月 30 日)derrickstolee
gitster
fetch
:文档和测试 --refmap=""签署人:Derrick Stolee
为了防止“ ”调用期间出现较长的阻塞时间
git fetch
,用户可能需要为后台“ ”进程设置时间表git fetch
。
但是,由于 Git 添加远程时在配置中设置的默认 refspec,这些运行将更新 refs/remotes 分支。
因此,用户不会注意到在前台获取期间远程引用何时更新。事实上,他们可能希望这些引用保持不变,以便他们可以使用上次前台获取调用的引用。
--refmap=
这可以通过使用 ' ' 和自定义 refspec覆盖配置的 refspec 来完成:Run Code Online (Sandbox Code Playgroud)git fetch --refmap='' <remote> +refs/heads/*:refs/hidden/<remote>/*
填充自定义参考空间并下载新的可访问对象包。
这种调用允许发生一些事情:
- 如果参考资料已更新,我们会下载一个新包。2. 由于refs/hidden分支存在,GC不会删除新下载的数据。
- 启用后
fetch.writeCommitGraph
,引用/隐藏引用用于更新提交图文件。为了避免 refs/hidden 目录无限制地填充,
--prune
可以包含该选项。当提供这样的引用规范时,该--prune
选项不会删除远程引用,而只会删除目标引用空间中的引用。更新文档以阐明“
--refmap=""
”的工作原理并创建测试以保证将来仍然存在此行为。
因此git fetch
选项手册页现在包括:
Run Code Online (Sandbox Code Playgroud)--refmap=<refspec>:
当获取命令行上列出的引用时,使用指定的引用规范(可以多次给出)将引用映射到远程跟踪分支,而不是
remote.*.fetch
远程存储库的配置变量的值。
<refspec>
为选项提供空会--refmap
导致 Git 忽略配置的 refspec 并完全依赖作为命令行参数提供的 refspec。有关详细信息,请参阅“配置的远程跟踪分支
” 部分。
请注意,我们在过去 7 年左右的时间里对远程跟踪分支进行的更积极的更新并未反映在文档中,该更新已通过 Git 2.27(2020 年第二季度)进行了纠正。
请参阅Philippe Blain ( )的提交 a440884和提交 f6a65de(2020 年 4 月 5 日)。(由Junio C Hamano 合并 -- --在2020 年 4 月 22 日提交 fdee8b1中)phil-blain
gitster
pull doc
:纠正示例的过时描述签字人: Philippe Blain
自f269048754(“
fetch
:机会性地更新跟踪引用”,2013-05-11,Git v1.8.4-rc0 -批量 #0中列出的合并)以来, git pull中的底层更新了配置的远程跟踪分支。git fetch
[
](https://git-scm.com/docs/git-pull) <remote> <branch>
然而,文档“示例”部分中的示例
git pull
仍然表明情况并非如此。更正该示例的描述。
因此,代替,对于git pull origin next
:
这会在 FETCH_HEAD 中临时留下一个副本
next
,但不会更新任何远程跟踪分支。
使用远程跟踪分支,可以通过调用 fetch 和 merge 来完成相同的操作:
next
这会在 FETCH_HEAD 中临时留下一个副本,并更新远程跟踪分支origin/next
。
可以通过调用 fetch 和 merge 来完成相同的操作: