我正在尝试为我的团队建立一个 git 公共存储库。
我已经在 Linux 机器(RedHat 5.6)上安装了 Git。
第一步,我尝试通过设置 Git 以通过 xinetd 运行来配置它以使用 git 协议。
以下是 /etc/xinetd.d/git-daemon 的内容:
# default: off
# description: The git server offers access to git repositories
service git
{
disable = no
type = UNLISTED
port = 9418
socket_type = stream
wait = no
user = nobody
server = /usr/bin/git/git
log_type = FILE /var/log/git-daemon
server_args = daemon --verbose --inetd --export-all --base-path=/tmp
log_on_failure += USERID
}
根据 /var/log/messages,服务已正确启动。
当我尝试克隆测试(裸)存储库时,出现失败:
C:\Users\ltal>git clone git://10.161.202.45/lior-test.git c:\liorssf
Cloning into c:\liorssf...
fatal: protocol error: bad line length character: fata
从 shell 运行为 xinetd 配置的相同命令似乎工作正常:
/usr/bin/git/git daemon --verbose --export-all --base-path=/tmp &
现在克隆可以工作了。
我做错了什么?似乎找不到解决方案。
答案1
“fata” 是“fatal”的开头,git clone
将其截断,因此您可以直接尝试使用nc 10.161.202.45 9418
来获取 git daemon 返回的完整消息,然后如果这不足以修复它,您可以暂时在 xinetd 配置的服务器字段中替换/usr/bin/git
,/usr/bin/strace
并将其添加-f /usr/bin/git
到server_args
字段前面。这可能是权限错误,也许您拥有/.git/
root 用户,并且git daemon
可能以权限较低的git
用户身份运行,尝试读取时会卡住/.git/config
……
答案2
可能/usr/bin/git
不在 PATH 中。
添加并再试一次env += GIT_TRACE=/tmp/git-xinetd.log
,/etc/xinetd.d/git-daemon
看看日志说了什么?
答案3
问题出在我用于设置 xinetd 的用户上。
我将其更改为 root(现在),现在我可以愉快地从其他客户端克隆存储库。