4

我在 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/ 
4

2 回答 2

2

它被称为远程助手

当 git 需要与本地不支持的远程存储库交互时,它们会被 git 调用。
给定的助手将实现此处记录的功能的子集。

当 git 需要使用远程帮助程序与存储库交互时,它会将帮助程序作为独立进程生成,将命令发送到帮助程序的标准输入,并期望从帮助程序的标准输出中得到结果。

请注意,在 Git 2.11(2016 年第四季度)之前,“ git fetch http::/site/path”(这是一个无效的 url)不会正确终止,而是会出现段错误。

请参阅Jeff King ( )的提交 d63ed6e(2016 年 9 月 8 日) 。(由Junio C Hamano 合并 -- --提交 c13f458中,2016 年 9 月 15 日)peff
gitster

remote-curl: 处理没有协议的 URL

通常remote-curl永远不会看到开头没有“ proto:”的 URL,因为这就是告诉 git 运行“ git-remote-proto”帮助程序的原因(并且git-remote-http,等等,是 的别名git-remote-curl)。

但是,特殊语法“ proto::something”将git-remote-proto仅以“something”作为 URL 运行。
因此,格式错误的 URL 如下:

http::/example.com/repo.git

会将 URL “ /example.com/repo.git” 提供给git-remote-http.
生成的 URL 没有协议,但是 372370f (http: use credential API to handle proxy authentication, 2016-01-26) 添加的代码没有处理这种情况和段错误。


Git 2.13(2017 年第二季度)通过确保“智能 HTTP”远程助手了解如何处理--push-options通过外部远程助手接口传递的“”来扩展这一点。

请参阅提交 511155d提交 eb7b974(2017 年 3 月 22 日),作者为Brandon Williams ( mbrandonw)
(由Junio C Hamano 合并gitster——提交 4e87565中,2017 年 3 月 27 日)

remote-http 进程现在可以接收选项,因为git send-pack有:

--push-option=<string>

将指定的字符串作为推送选项传递给服务器端的钩子使用。如果服务器不支持推送选项,则会出错。


Git 2.14 确实强制执行推送选项验证。

请参阅提交 cbaf82c(2017 年 5 月 9 日)和提交 b7b744f(2017 年 5 月 8 日)由Jonathan Tan ( jhowtan)
(由Junio C Hamano 合并 -- gitster--提交 3c98008中,2017 年 5 月 23 日)

接收包程序现在确保推送证书记录用于推送的同一组推送选项。

于 2016-09-16T12:12:50.560 回答
1

每个 http 请求都有一个单独的进程。有很多客户端请求服务,所以有很多 git 进程。

于 2012-09-05T06:20:38.220 回答