在版本控制系统中,守护进程是Git存储库的一个非常简单的服务器。从技术上讲,它是一个简单的TCP命令,用于侦听名为“Default Git port”的端口。它的行为就像普通服务器一样,等待连接建立服务,并在启用时提供服务。
处理开始,守护进程使存储库可以使用git://protocol,这看起来不安全,但非常有效。当存在安全问题时,需要拉入SSH协议,侦听它的默认端口是9418。
守护进程的配置是通过无需身份验证的推送来完成的。这是相当危险的。它应该总是在局域网封闭的环境下进行,并且源必须是可信的。当有疑问时,应该使用SSH来安全地推送。
git daemon命令使用名为“git magic export ok”的魔术文件验证目录。这将帮助Git拒绝显式标记的要导出的目录,除非参数设置为all。同样,如果您传递一些指定参数的目录路径,您可以通过将它们与附带的白名单进行比较来进一步限制它们。
此外,默认情况下仅启用upload pack服务,该服务用于服务fetch pack、ls remote clients等包,并使用clone、fetch或pull命令调用。此方法理想地用于只读进程,并且从服务器端本身的存档中不注明日期。
Git守护进程及其选项
现在让我们了解Git中daemon命令使用各种选项的其他前景。
Git守护进程具有巨大的功能。为了我们的流程和简单性,它允许您在计算机中创建本地服务器,并且您可以轻松地协作、直接推送和应用于克隆。通过使用此命令添加不同的选项,您可以轻松地让服务器以不同的方式运行。
daemon命令调用以下选项,如下所示:
$ git daemon [--verbose] [--syslog] [--export-all]
[--timeout=<n>] [--init-timeout=<n>] [--max-connections=<n>
[--strict-paths] [--base-path=<path>] [--base-path-relaxed]
[--user-path | --user-path=<path>]
[--interpolated-path=<pathtemplate>]
[--reuseaddr] [--detach] [--pid-file=<file>]
[--enable=<service>] [--disable=<service>]
[--allow-override=<service>] [--forbid-override=<service>]
[--access-hook=<path>] [--[no-]informative-errors]
[--inetd |
[--listen=<host_or_ipaddr>] [--port=<n>]
[--user=<user> [--group=<group>]]]
[--log-destination=(stderr|syslog|none)]
[<directory>…?]
base-path选项使用点号指向当前目录下的存储库。这样做是为了确保在存储库中包含文件。 考虑一个实例,您需要共享GitHub存储库,但是您没有访问它的权限。在本例中,您将使用git daemon命令来访问存储库以进行共享。您只需要定义访问方法。我们来看看其中的一些方法。 这将运行daemon命令并以服务器的形式建立连接。在这之后你可能会看到一些东西。 您可以用IP替换127.0.0.1以寻址本地计算机。 推送访问 这使您能够跨要推送的分支拥有推送访问权限。它添加了您想要共享和签出的功能。在进一步执行时,它会显示如下内容: 您需要创建魔法般的文件,如下面的命令所示: 它最初将无法导出。您需要定义–export all选项。定义了这个之后,您就可以很容易地共享您的单个存储库了。它将输出以下内容: 现在,您的客户机可以轻松地访问存储库。
export-all选项用于共享基本路径选项中的所有可用存储库。
reuseaddr选项用于在超时时从旧连接重新启动允许的服务器。
verbose选项主要用于检查请求加入服务器的所有即将到来的连接的日志详细信息。
enable/disable=
receive-pack选项允许匿名方式推送
分享
只读访问
$ cd my-repos
$ ls
instabot-spoofer- better-twitter instapound
$ git daemon --base-path=. --export-all --reuseaddr --informative
errors --verbose
[8322] Ready to rumble
$ git clone git://127.0.0.1/instbot-spoofer
Cloning into 'instabot-spoofer'...
remote: Counting objects: ...
...
$ git pull
Already up-to-date.
$ git daemon --base-path=. --export-all --enable=receive-pack --reuseaddr --informative-errors --verbose
[8322] Ready to rumble
$ git checkout -b sharing
# made some changes ...
$ git commit -am "add sharing feature"
$ git push -u origin sharing
...
* [new branch] sharing -> sharing
...
Sharing single repository
$ cd my-repos
$ ls
Instabot-spoofer better-twitter instapound
$ touch instabot-spoofer/.git/git-daemon-export-ok
$ git clone git://127.0.0.1/instabot-spoofer
Cloning into 'instabot-spoofer'...
remote: Counting objects: ..., done.
...