首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用launchd在OS X上启动git-daemon

使用launchd在OS X上启动git-daemon
EN

Stack Overflow用户
提问于 2011-03-22 16:13:47
回答 2查看 3.3K关注 0票数 4

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

代码语言:javascript
复制
sudo -u git git-daemon --basepath=/Users/git/repos/ --export-all

那么一切都很好,例如:

代码语言:javascript
复制
git clone git://localhost/My_Project.git

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

代码语言:javascript
复制
<?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,则会收到以下错误:

代码语言:javascript
复制
Cloning into My_Project...
fatal: The remote end hung up unexpectedly

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

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

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

代码语言:javascript
复制
git[431]
error: cannot run upload-pack: No such file or directory
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-23 14:19:34

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

通常,Git命令是通过主git命令(例如git commit,不再是git-commit)调用的。其中,git主命令将内置的“exec PATH”添加到“子命令”将继承的PATH环境变量中。

您的启动配置直接调用一个“内部”程序- git-daemon -而不是让正常的顶级程序调用它(在扩展它将继承的路径之后)。

使用以下ProgramArguments

代码语言:javascript
复制
        <array>
                <string>/path/to/git</string>
                <string>daemon</string>
                <string>--base-path=/Users/git/repos/</string>
                <string>--export-all</string>
        </array>

其中,/path/to/gitwhich git在常规shell会话中报告的内容。

票数 6
EN

Stack Overflow用户

发布于 2011-03-23 00:49:16

你没有告诉它要运行。尝试取出OnDemand并添加以下内容:

代码语言:javascript
复制
<key>KeepAlive</key>
<true/>
<key>RunAtLoad</key>
<true/>

或者,你可以使用inetdCompatibility (另见:Sockets)和git-daemon--inetd标志来使进程只在连接时启动,这对你来说可能是一个更好的配置,尽管可能需要做更多的工作。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5388390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档