我现在明白了这个特殊的混乱来自哪里。很显然,服务器端运行在服务器端,但是如果你运行git push
到一个远程服务器的URL是file://...
(或者只是一个像/some/path/to/repo
这样的路径),并且在各种服务器端挂接,让服务器打印它的主机名,或者软件版本,或什么的,你会发现,那些是你自己机器的软件版本等
这里的诀窍是,当你正在处理一个本地路径,你的Git同时充当客户和服务器,说话自己。即使您的本地文件系统是基于网络的,只要Git本身将其视为本地文件系统,情况也是如此。因此,对于NFS或CIFS/Samba,或者(如果您使用这些东西)Andrew档案系统挂载或Plan9挂载或FUSE或其他,只要Git认为它只是您自己机器上的普通旧文件,Git会全部服务器工作本身,所以这些仍然是本地的。
(事实上,如果你在Unix/Linux系统上运行ps
,你会发现你的客户端已经分叉的一个git receive-pack
过程:
remote: PID PPID TT STAT TIME COMMAND
[snip]
remote: 28494 27867 4 S+ 0:00.06 git push me testbr
remote: 28495 28494 4 S+ 0:00.07 git-receive-pack /home/torek/tmp/t
remote: 28499 28495 4 S+ 0:00.01 /bin/sh hooks/pre-receive
remote: 28500 28499 4 R+ 0:00.00 ps -O ppid
因此,实际上,过程28494是“客户端”在这里,虽然进程28495是“服务器”,当然,它们都在单个主机/虚拟机/无论什么地方,我在此设置远程me
指向file:///home/torek/tmp/t
。)
服务器端挂接在服务器上运行否则它们会被称为客户端钩子:-))。它们在所有新对象已存在于存储库中之后运行*。在更新所有引用之前,预接收和更新钩子运行*,而在所有引用更新之后,接收后钩子运行*。 – torek
啊:如果你推送一个*本地*文件系统('file:// foo'),那么这个“服务器”就是你自己的机器,即客户机是你的机器,但服务器也是如此,所以当“服务器“运行一些东西,这是你的客户做跑步。我不使用Windows,所以我不能说它可能认为哪些协议是“本地”(* protocol *是https://host.dom的'https:'或'ssh:'或'file:'部分。 ain/path'或'ssh:// host.dom.ain/path'或'file:// path' URL)。 (顺便说一句,我没有降低你原来的问题,因为我确实认为这些问题没有很好地记录下来。) – torek
不用担心,在反思我最初提出的问题和阅读你的第一条评论之后,我意识到我的问题听起来有多愚蠢。无论如何,我更关心得到明确的答案。感谢您确认它没有很好的记录。嗯,我想标记你最近的评论作为答案,但我认为这是不可能的。 – solstice333