我以某种方式删除了我的代码分支的整个目录。我克隆了一个新的。除推动外,一切正常。
~/workspace/wtf (mybranch)]$ git push origin mybranch
error: Cannot access URL [my url], return code 22
fatal: git-http-push failed
git pull可以,但是。我该如何解决?
我以某种方式删除了我的代码分支的整个目录。我克隆了一个新的。除推动外,一切正常。
~/workspace/wtf (mybranch)]$ git push origin mybranch
error: Cannot access URL [my url], return code 22
fatal: git-http-push failed
git pull可以,但是。我该如何解决?
Answers:
从git 1.6.6开始新的“ smart-http”支持。新方法允许整个包一次传输,而不是作为单个文件传输。
您还可以使用gitweb在同一位置提供可浏览的URL。
注意:由于访问是由apache控制的,因此您可以将任何Auth要求(htaccess或ldap等)添加到每个存储库的设置中。
该答案假定您拥有远程服务器,并且想要添加/修复http支持。
首先:检查apache日志,当apache尝试执行git-http-backed的cgi脚本时,它可能是权限被拒绝/无法定位错误。
只需制作一个新的git_support.conf文件,并将其包含在apache中(在httpd.conf中添加include语句)
#
# Basic setup for git-http-backend
#
SetEnv GIT_PROJECT_ROOT /opt/git_repos
SetEnv GIT_HTTP_EXPORT_ALL
SetEnv REMOTE_USER=$REDIRECT_REMOTE_USER #IMportant !!! This could be your problem if missing
<Directory /opt/git> # both http_backend and gitweb should be somewhere under here
AllowOverride None
Options +ExecCGI -Includes #Important! Lets apache execute the script!
Order allow,deny
Allow from all
</Directory>
# This pattern matches git operations and passes them to http-backend
ScriptAliasMatch \
"(?x)^/git/(.*/(HEAD | \
info/refs | \
objects/(info/[^/]+ | \
[0-9a-f]{2}/[0-9a-f]{38} | \
pack/pack-[0-9a-f]{40}\.(pack|idx)) | \
git-(upload|receive)-pack))$" \
/opt/git/libexec/git-core/git-http-backend/$1
# Anything not matched above goes to displayable gitweb interface
ScriptAlias /git /opt/git/cgi-bin/gitweb.cgi/
结果就是可以推/拉的能力:
me@machine /tmp/eddies $ git pull
Already up-to-date.
me@machine /tmp/eddies $ touch changedFile
me@machine /tmp/eddies $ git add .
me@machine /tmp/eddies $ git commit -am"commiting change"
[master ca7f6ed] commiting change
0 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 changedFile
me@machine /tmp/eddies $ git push origin master
Counting objects: 3, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 239 bytes, done.
Total 2 (delta 1), reused 0 (delta 0)
To http://mysecretdomain.com/git/eddies
0f626a9..ca7f6ed master -> master
您可以在线浏览这些更改。
资料来源:http : //repo.or.cz/w/alt-git.git?a= blob_plain; f= gitweb/ README
"SetEnv takes 1-2 arguments, an environment variable name and optional value to pass to CGI."
-为什么?
要通过http 启用“ git push ”,必须在Web服务器上启用WebDAV。要针对Apache Web服务器执行此操作,只需编辑配置文件:
vim /etc/httpd/conf/httpd.conf
然后搜索以以下内容开头的行:
<Directory "/var/www/html">
在其后添加以下行:
Dav On
确保在httpd.conf中也没有注释以下行:
LoadModule dav_fs_module modules/mod_dav_fs.so
之后,您就准备好了。使用以下命令重新启动Apache Webserver:
service httpd restart
另外,请确保pache:apache用户和组使用以下命令可写入服务器上的所有git存储库文件:
chown -R apache:apache /var/www/html/your_git_repository
否则,执行“ git push”时,未能设置正确的权限将导致“ PUT错误:curl结果= 22,HTTP代码= 403”。
现在,只需在客户端计算机上执行“ git push”,一切都应该工作。
编辑.git / config文件的以下部分:
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = http://git.repository.url/repo.git
至
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = http://username:password@git.repository.url/repo.git
然后尝试git push origin master
。
根据需要编辑配置文件中其他存储库URL的身份验证详细信息,然后推送到所需的分支。
git remote set-url origin ...
也可以。
我在git-http-backend,ldap身份验证配置的推送操作中遇到了相同的问题。
最后,我找到了解决方案并在此serverfault问题中对其进行了描述
也许它将帮助有类似问题的人。
大
我还有其他错误,但是可以!
我试着解释一下:
Could not LOCK /path/to/www/gitproject/refs/heads/master due to a failed precondition (e.g. other locks)
user1520409
ist作品的答案。但是如何在推送消息中从文本中隐藏密码?
http.receivepack
。