我正在尝试配置我自己的私有git服务器以使其可通过HTTP使用,但我被困住了,我需要一些帮助。
我回顾了几个关于如何通过HTTP提供git存储库的教程,我认为几乎所有部分都在正确的位置,因为目前我能够从不同工作站上的几个客户端克隆远程存储库,我也可以浏览使用gitweb应用程序的存储库。
从客户端我可以运行git commit
命令,但我无法将更改推送到主分支。
git push comman记录以下错误:
remote: error: unable to create temporary file: Operation not permitted
remote: fatal: failed to write object
error: unpack failed: unpack-objects abnormal exit
更新:经过多次测试后,我成功地从几个运行的客户端推了四次。成功推送只是重复执行相同命令几次。这让我相信问题可能是服务器端的一些超载问题,不允许接收更改,但我仍然无法理解缺少哪个配置。
环境如下:
$ uname -av
Linux odroid 3.8.13.30 #1 SMP PREEMPT Fri Feb 20 14:34:08 BRST 2015 armv7l armv7l armv7l GNU/Linux
$ apache2 -version
Server version: Apache/2.4.7 (Ubuntu)
Server built: Jan 14 2016 17:49:32
$ git --version
git version 1.9.1
权限不应该是一个问题,因为存储库文件夹对运行apache服务的组具有rw权限
$ ls /var/git/repos
drwxrwx--- 0 odroid www-data 0 may 28 23:15 testremote.git
drwxrwx--- 0 odroid www-data 0 may 28 23:17 test
$ ps aux | grep apache
root 4524 0.0 0.8 107588 17836 ? Ss may25 0:17 /usr/sbin/apache2 -k restart
www-data 7797 0.0 0.4 107836 8372 ? S 00:35 0:00 /usr/sbin/apache2 -k restart
www-data 7798 0.0 0.3 107636 7392 ? S 00:35 0:00 /usr/sbin/apache2 -k restart
www-data 7799 0.0 0.4 107836 8300 ? S 00:35 0:00 /usr/sbin/apache2 -k restart
www-data 7800 0.0 0.3 107692 7916 ? S 00:35 0:00 /usr/sbin/apache2 -k restart
www-data 7801 0.0 0.3 107636 7392 ? S 00:35 0:00 /usr/sbin/apache2 -k restart
www-data 7812 0.0 0.3 107636 7404 ? S 00:35 0:00 /usr/sbin/apache2 -k restart
我当前的apache配置是:
SetEnv GIT_PROJECT_ROOT /mnt/wh13/sandbox/git/repo/
SetEnv GIT_HTTP_EXPORT_ALL 1
SetEnv REMOTE_USER $REDIRECT_REMOTE_USER
ScriptAliasMatch "(?x)^/git/\
(.*\.git/(HEAD|info/refs|objects/\
(info/[^/]+|[0-9a-f]{40}\.(pack|idx))|git-(upload|receive)-pack))$"\
/usr/lib/git-core/git-http-backend/$1
ScriptAlias /git/ /usr/share/gitweb/
ScriptLog ${APACHE_LOG_DIR}/cgi_log.log
<Directory /usr/share/gitweb>
Options +FollowSymLinks +ExecCGI
AddHandler cgi-script .cgi
DirectoryIndex gitweb.cgi
</Directory>
<Directory "/usr/lib/git-core*">
Options ExecCGI Indexes
AuthType Basic
AuthName "GIT Repositories"
AuthUserFile /mnt/wh13/sandbox/git/htpasswd.git
Require valid-user
Order allow,deny
Allow from all
</Directory>
<Directory "/usr/share/gitweb/static">
Options -ExecCGI +Indexes
SetHandler default-handler
</Directory>
我不了解哪个操作不被允许,并且尝试使用ScriptLog ${APACHE_LOG_DIR}/cgi_log.log
指令从CGI脚本获取更多详细信息并未提供任何有用的信息。
有人可以就如何进一步排除故障并解决问题提出一些建议吗?
提前致谢并对长篇文章感到抱歉
答案 0 :(得分:0)
遇到这些错误时,Git 2.21(2019年第一季度)可能会更强大。
http后端CGI进程没有正确清理它自身死亡时运行的子进程以运行upload-pack等,此问题已得到纠正。
请参见commit 02818a9的Max Kirillov (max630
)(2018年11月24日)。
帮助者:Carlo Arenas (carlosJoseloMtz
)。
(由Junio C Hamano -- gitster
--在commit ea8620b中合并,2019年1月4日)
上分叉的
http-backend
:启用对upload
receive-pack
/exit
的清理如果
http-backend
因错误而去世,则开始的upload-pack
或receive-pack
不会被杀死并等待,而是要运行一段时间,直到由于关闭stdin而退出< / strong>。这在工作环境中可能是不可取的,并且有时会导致t5562失败,因为进程会保持打开状态
act.err
,有时在下一次使用该文件的测试之后就在那里写入错误。通过启用http-backend出口处的命令清除功能来修复。