我在shell中找不到git-remote-http命令,为什么会有这样的进程?
我只打开了一个git svn进程,为什么有这么多git相关的进程?
[mirror@home git]$ pgrep git
12035
12036
22308
22309
22394
22397
24128
24129
26136
26137
[mirror@home git]$ pgrep git -lf
12035 git fetch origin
12036 git-remote-http origin http://git.savannah.gnu.org/r/weechat.git/
22308 git svn clone http://code.taobao.org/svn/obconnector/
22309 /usr/bin/perl /home/mirror/ins_git/libexec/git-core/git-svn clone http://xxx.org/svn/xxx/
22394 git update-index -z --index-info
22397 git hash-object -w --stdin-paths --no-filters
24128 git fetch origin
24129 git-remote-http origin http://git.xxx.org/xxx.git/
26136 git fetch origin
26137 git-remote-http origin http://git.xxx.org/xxx.git/
答案 0 :(得分:1)
每个http请求都有一个单独的进程。 有许多客户端请求服务,因此有很多git进程。
答案 1 :(得分:1)
它被称为 remote helper
当它需要与远程存储库进行交互时,git会调用它们.git本身不支持它们 给定的帮助程序将实现此处记录的功能的子集。当git需要使用远程帮助程序与存储库进行交互时,它 将帮助程序作为一个独立的进程生成,将命令发送给帮助程序的标准输入,并期望来自帮助程序的标准输出的结果。
请注意,在Git 2.11(2016年第4季度)之前," git fetch http::/site/path
" (这是一个无效的网址)会不正确死亡,而是会发生段错误。
commit d63ed6e见Jeff King (peff
)(2016年9月8日)
(由Junio C Hamano -- gitster
--合并于commit c13f458,2016年9月15日)
remote-curl
:处理没有协议的网址通常
remote-curl
永远不会看到没有"proto:
"在开头,因为这是告诉git运行"git-remote-proto
"帮助(以及git-remote-http
等是git-remote-curl
的别名。然而,特殊语法"
proto::something
"将仅使用""运行git-remote-proto
作为URL。
所以格式错误的网址如:
http::/example.com/repo.git
将提供网址"
/example.com/repo.git
"至git-remote-http
生成的URL没有协议,但由372370f(http:使用凭证API处理代理身份验证,2016-01-26)添加的代码不处理此案例和段错误。
Git 2.13(2017年第二季度)通过确保"智能HTTP"远程
帮助者理解如何处理" --push-options
"通过了
外部远程帮助程序接口。
commit 511155d见commit eb7b974,Brandon Williams (mbrandonw
)(2017年3月22日)
(Junio C Hamano -- gitster
--于2017年3月27日commit 4e87565合并)
remote-http进程现在可以接收选项,因为git send-pack具有:
--push-option=<string>
将指定的字符串作为推送选项传递给服务器端的挂钩消费。如果服务器不支持推送选项,则会出错。
Git 2.14确实强制执行推送选项验证。
commit cbaf82c(2017年5月9日)和commit b7b744f(2017年5月8日)Jonathan Tan (jhowtan
)。
(Junio C Hamano -- gitster
--于2017年5月23日commit 3c98008合并)
现在,receive-pack程序可以确保推送证书 记录用于推送的同一组推送选项。