我不知怎么删除了代码分支的整个目录。我克隆了一个新的。除了推送之外,它运行良好。
~/workspace/wtf (mybranch)]$ git push origin mybranch
error: Cannot access URL [my url], return code 22
fatal: git-http-push failed
但是 git pull 可以工作。我该如何修复它?
答案1
我犯了一个错误,使用 https 而不是 ssh 来获取新副本。从那时起,我进行了修改和提交,但由于显而易见的原因,无法推送。
为了恢复,我简单地将 .git/config 中的 [remote "origin"] 部分从
到
网址 =[电子邮件保护]:AIFDR/riab_core.git
此后,我就可以再次用力了。
答案2
仅使用 git 即可实现更快的 HTTP 推送 - 无需 webDAV
自 git 1.6.6 开始,新增了“smart-http”支持。新方法允许一次性传输整个包,而不是作为单个文件进行传输。
您还可以使用 gitweb 在同一位置提供可浏览的 URL。
注意:由于访问由 apache 控制,因此您可以将任何 Auth 要求(htaccess 或 ldap 等)添加到每个存储库的设置中。
该答案假设您拥有远程服务器并想要添加/修复 http 支持。
首先:检查 apache 日志,当 apache 尝试执行 git-http-backed cgi 脚本时,很可能出现权限被拒绝/无法定位错误。
为 git 添加 HTTP 支持
只需创建一个新的 git_support.conf 文件,并将其包含在 apache 中(在 httpd.conf 中添加包含语句)
#
# 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
答案3
要启用“git push“通过 http,您必须在 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
另外,请确保服务器上的所有 git 存储库文件均可由 pache:apache 用户和组写入:
chown -R apache:apache /var/www/html/your_git_repository
否则,如果未能设置正确的权限,则执行“git push”时将导致“PUT 错误:curl result=22,HTTP 代码=403”。
现在只需从您的客户端机器执行“git push”即可一切正常。
答案4
编辑 .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:[email protected]/repo.git
那就尝试一下git push origin master
。
根据需要编辑配置文件中其他存储库 URL 的身份验证详细信息,并推送到所需的分支。