4

我正在尝试使用我的 OS X 桌面(主要作为测试用例)设置一个内部 git 服务器。当涉及 SSH 密钥时一切正常,但我目前正在尝试使用 git-daemon 进行只读克隆。如果我在终端中启动 git-daemon:

sudo -u git git-daemon --basepath=/Users/git/repos/ --export-all

然后一切正常,例如

git clone git://localhost/My_Project.git

但是当我尝试使用 launchd 进行设置时,它会拒绝所有请求。我正在使用这个 plist 文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>Label</key>
        <string>git</string>
        <key>UserName</key>
        <string>git</string>
        <key>OnDemand</key>
        <false/>
        <key>ProgramArguments</key>
        <array>
                <string>/path/to/git-daemon</string>
                <string>--base-path=/Users/git/repos/</string>
                <string>--export-all</string>
        </array>
</dict>
</plist>

如果我尝试克隆 My_Project,则会收到以下错误:

Cloning into My_Project...
fatal: The remote end hung up unexpectedly

令人沮丧的是,我相信这曾经可以工作,因此问题可能与我的 plist 文件或使用 launchd 的关系不大,而更多地与可能已更改的任何网络设置有关。任何建议将不胜感激。

抱歉,这更像是一个系统管理员问题,但我认为开发人员可能在这里有一些经验。

更新:如果 repo 存在,控制台会报告以下错误:

git[431]
error: cannot run upload-pack: No such file or directory
4

2 回答 2

6

问题是git-daemon在它从launchd进程继承的 PATH 中的任何目录中都找不到git可执行文件。当您从 shell 启动它时它会起作用,因为从 shell 继承的 PATH 包含适当的目录。

通常,Git 命令是通过主git命令调用的(例如git commit,not (anymore) git-commit)。除此之外,主git命令将内置的“执行路径”添加到“子命令”将继承的 PATH 环境变量中。

你的launchd配置直接调用一个“内部”程序——git-daemon——而不是让普通的顶级程序调用它(在扩展它将继承的 PATH 之后)。

使用以下ProgramArguments

        <array>
                <string>/path/to/git</string>
                <string>daemon</string>
                <string>--base-path=/Users/git/repos/</string>
                <string>--export-all</string>
        </array>

您的正常 shell 会话中/path/to/git的任何报告在哪里。which git

于 2011-03-23T06:19:33.550 回答
0

你不是在告诉它运行。尝试取出OnDemand并添加:

<key>KeepAlive</key>
<true/>
<key>RunAtLoad</key>
<true/>

或者,您可以使用inetdCompatibility(另请参见:Sockets)和git-daemon'--inetd标志使该过程仅在连接时启动。这对您来说可能是一个更好的配置,尽管可能需要做更多的工作才能开始。

launchd.plist(5)手册页包含所有详细信息。

于 2011-03-22T16:49:16.317 回答