Q:
//报错
git clone git://192.168.221.141/prometheus.git
[root@puppet2 local]# git clone git://192.168.221.141/proheus.git
Initialized empty Git repository in /usr/local/prometheusit/
fatal: The remote end hung up unexpectedly
A:
- 检查iptables和SELinux ,确认服务器和客户端都没有问题。
- 检查git-daemon端git库是否设置正确, 命令是git init –bare 正确后应该有以下文件:
[root@puppet1 prometheus.git]# ls
branches description hooks objects
config HEAD info refs
进入配置文件,检查是否打开receivepack = true
[root@puppet1 prometheus.git]# vim config
1 [core]
2 repositoryformatversion = 0
3 filemode = true
4 bare = true
5 [daemon]
6 receivepack = true
~
3.杀掉git-daemon服务,重新启动。
4.重新clone之前成功的Nginx库,失败,报同样的错误。得出结论,并不是git库出了问题,而是git-daemon服务本身出了问题。
5.查找错误日志,位于/var/log/messages 中,显示:
Jun 16 17:59:53 puppet1 git-daemon[1649]: Connection from 192.168
.221.140:50628
Jun 16 17:59:53 puppet1 git-daemon[1649]: Extended attributes (22
bytes) exist <host=192.168.221.141>
Jun 16 17:59:53 puppet1 git-daemon[1649]: Request upload-pack for
'/prome.git'
Jun 16 17:59:53 puppet1 git-daemon[1649]: '/data/git/repo/prome.g
it': not in whitelist
Jun 16 17:59:53 puppet1 git-daemon[1641]: [1649] Disconnected (wi
th error)
并不知道白名单是什么······也没设置过。
6.再次kill掉git-daemon,重新启动,发现突然成功了
[root@puppet2 local]# git clone git://192.168.221.141/prometheus.git
Initialized empty Git repository in /usr/local/prometheus/.git/
warning: You appear to have cloned an empty repository.
怀疑是不是启动程序时的配置项有问题,将两次配置项对比
git daemon --detach --verbose --export-all --base-path=/data/git/repo/ --reuseaddr --enable=receive-pack /data/git/repo/
git daemon --detach --verbose --export-all --base-path=/data/git/repo --reuseaddr --enable=receive-pack /data/git/repo/
仔细对比发现路径写法稍有不同
--base-path=/data/git/repo //错误情况下
--base-path=/data/git/repo/ //正确情况下
测试,两种不同的写法,发现确实是因为–base-path=/data/git/repo 不行,再次进行测试是否是因为,同一个配置中前后两个路径不一致的原因,将配置改为:
[root@puppet1 prome.git]# git daemon --detach --verbose --expoall --base-path=/data/git/repo --reuseaddr --enable=receive-pa/data/git/repo
发现也可以成功!
总结:
在进行git-daemon启动时命令中有两次设置路径,一定要保持两次一致,若写repo就都写repo,如果写repo/就都写repo/,如果不一样就会报错,拉取失败。