어떻게 든 코드 분기의 전체 디렉토리를 삭제했습니다. 나는 새로운 것을 복제했다. 밀어 넣는 것 외에는 잘 작동했습니다.
~/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이 작동합니다. 어떻게 고칠 수 있습니까?
답변:
ssh 대신 https를 사용하여 새로운 사본을 실수로 실수했습니다. 나는 그 이후로 수정하고 커밋했지만 명백한 이유로 밀어 넣을 수 없었습니다.
복구하기 위해 .git / config의 [원격 "origin"] 섹션을
에
url = git@github.com : AIFDR / riab_core.git
그 후 다시 밀 수있었습니다.
git-http-push failed
. op가 http 또는 https, -1을 통해 설정하려고합니다.
자식 1.6.6 이후의 새로운 "smart-http"지원. 새로운 방법을 사용하면 전체 파일을 개별 파일이 아닌 한 번에 전송할 수 있습니다.
또한 gitweb을 사용하여 동일한 위치에서 탐색 가능한 URL을 제공 할 수도 있습니다.
참고 : 액세스는 아파치에 의해 제어되므로 각 저장소의 설정에 인증 요구 사항 (htaccess 또는 ldap 등)을 추가 할 수 있습니다.
이 답변은 사용자가 원격 서버를 소유하고 있고 http 지원을 추가 / 수정한다고 가정합니다.
첫 번째 : 아파치 로그를 확인하십시오. 아파치가 git-http-backed cgi 스크립트를 실행하려고 할 때 권한이 거부되었거나 오류를 찾을 수 없습니다.
새 git_support.conf 파일을 만들어 아파치에 포함시키기 만하면됩니다 (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 "를 활성화하려면 웹 서버에서 WebDAV를 활성화해야합니다. Apache Webserver에 대해이를 수행하려면 구성 파일을 편집하십시오.
vim /etc/httpd/conf/httpd.conf
그런 다음 다음으로 시작하는 줄을 검색하십시오.
<Directory "/var/www/html">
바로 다음 줄을 추가하십시오.
Dav On
주석 처리되지 않은 httpd.conf에도 다음 줄이 있어야합니다.
LoadModule dav_fs_module modules/mod_dav_fs.so
그 후에는 준비되었습니다. 다음을 사용하여 Apache 웹 서버를 다시 시작하십시오.
service httpd restart
또한 다음을 사용하여 서버의 모든 git 저장소 파일을 pache : apache 사용자 및 그룹이 쓸 수 있도록하십시오.
chown -R apache:apache /var/www/html/your_git_repository
그렇지 않으면, 올바른 권한을 설정하지 않으면 "git push"를 수행 할 때 "PUT 오류 : curl result = 22, HTTP code = 403"이 발생합니다.
이제 클라이언트 시스템에서 "git push"를 수행하면 모두 작동합니다.
HTTP를 통해 복제 한 저장소를 푸시 할 수 없습니다. URL을 a ssh://
또는 git://
유형 URL 로 업데이트해야합니다 .
git remote -v
있습니까?
.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 works 의 대답을 사용했습니다 .그러나 푸시 메시지의 텍스트에서 비밀번호를 숨기는 방법은 무엇입니까?
http.receivepack
.