我正在尝试使用我的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发布于 2011-03-23 14:19:34
问题是git-daemon无法在它从启动进程继承的路径中的任何目录中找到git可执行文件。当您从shell启动它时,它会起作用,因为从shell继承的路径包含适当的目录。
通常,Git命令是通过主git命令(例如git commit,不再是git-commit)调用的。其中,git主命令将内置的“exec PATH”添加到“子命令”将继承的PATH环境变量中。
您的启动配置直接调用一个“内部”程序- git-daemon -而不是让正常的顶级程序调用它(在扩展它将继承的路径之后)。
使用以下ProgramArguments
<array>
<string>/path/to/git</string>
<string>daemon</string>
<string>--base-path=/Users/git/repos/</string>
<string>--export-all</string>
</array>其中,/path/to/git是which git在常规shell会话中报告的内容。
发布于 2011-03-23 00:49:16
你没有告诉它要运行。尝试取出OnDemand并添加以下内容:
<key>KeepAlive</key>
<true/>
<key>RunAtLoad</key>
<true/>或者,你可以使用inetdCompatibility (另见:Sockets)和git-daemon的--inetd标志来使进程只在连接时启动,这对你来说可能是一个更好的配置,尽管可能需要做更多的工作。
launchd.plist(5)手册页包含了所有详细信息。
https://stackoverflow.com/questions/5388390
复制相似问题