git push ölümcül başarısız oldu


24

Bir şekilde kod dalımın tüm dizinini sildim. Yeni bir tane klonladım. İtme dışında iyi çalıştı.

~/workspace/wtf (mybranch)]$ git push origin  mybranch 
error: Cannot access URL [my url], return code 22
fatal: git-http-push failed 

Git çekme olsa da çalışır. Nasıl düzeltebilirim?

git  push 

1
Lütfen, bu el kitabını burada okuyun ve konuya dikkat edin http.receivepack.
hhh

Yanıtlar:


33

Yeni bir kopya için ssh yerine https kullanma hatası yaptım. O zamandan beri değişiklik ve taahhütte bulundum, ancak bariz nedenlerden dolayı zorlayamadım.

Kurtarmak için basitçe .git / config içinden [remote "origin"] bölümünü değiştirdim.

url = https://github.com/AIFDR/riab_core.git

için

url = git@github.com: AIFDR / riab_core.git

Ondan sonra tekrar itebilirim.


2
Başka bir protokole geçmeye gerek yok, http'i zorlamak istiyorsanız aşağıdaki cevabımı okuyun.
Fesleğen A

1
Basil ile aynı fikirdeyim, bu güvenlik duvarları vb

... sorun şu ki git-http-push failed, operasyonun http ya da https, -1 üzerinden bir şeyler kurmaya çalıştığını görüyorum.
hhh

14

Sadece git ile daha hızlı HTTP Push - webDAV gerekli değildir

Git 1.6.6'dan beri yeni "smart-http" desteği. Yeni yöntem, tüm paketin tek tek dosyalar olarak değil, aynı anda iletilmesine izin verir.

Gitweb'i aynı yerde göz atılabilir URL'ler sağlamak için de kullanabilirsiniz.

Not: Erişim apache tarafından kontrol edildiğinden, her bir havuzun kurulumuna herhangi bir Yetkilendirme gereksinimi (htaccess veya ldap, vb.) Ekleyebilirsiniz.

Bu cevap, uzak sunucunun size ait olduğunu ve http desteği eklemek / düzeltmek istediğinizi varsayar.

BİRİNCİ: Apache günlüklerini kontrol edin, büyük olasılıkla apache git-http-backed cgi betiğini çalıştırmaya çalıştığında hata bulunamıyor / izin verilemiyor.

Git'e HTTP Desteği Eklemek

Yeni bir git_support.conf dosyası hazırlayın ve apache'ye ekleyin (httpd.conf'a include ifadesini ekleyin)

#
#  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/

Sonuç, itme / çekme yeteneğidir:

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

Ve bu değişikliklere çevrimiçi göz atabilirsiniz .. gitweb göz atılabilir bir arayüz sunar

Kaynak: http://repo.or.cz/w/alt-git.git?a=blob_plain;f=gitweb/README


ÖNEMLİ satırı kullanıcı hakkında çalıştırdığımda, satır 7'yi alıyorum "SetEnv takes 1-2 arguments, an environment variable name and optional value to pass to CGI."- neden?
hhh

Bu değerin boş olduğunu tahmin ediyorum, bu yüzden setenv sadece 0 argüman görüyor. Apache bir yönlendirme kuralı kullandığından, REMOTE_USER boş olabilir, bu yüzden REDIRECT_RMEOTE_USER'ı yakalarız. RMEOTE_USER zaten tanımlanmışsa (veya REDIRECT kullanıcısı boşsa) atamayı isteğe bağlı hale getirebilmelisiniz. httpd.apache.org/docs/2.0/mod/mod_setenvif.html#setenvif

7

Http üzerinden " git " özelliğini etkinleştirmek için web sunucusunda WebDAV'ı etkinleştirmeniz gerekir. Bunu Apache Web Sunucusu için yapmak için, yapılandırma dosyasını düzenleyin:

vim /etc/httpd/conf/httpd.conf

Ardından şununla başlayan satırı arayın:

<Directory "/var/www/html">

Hemen ardından aşağıdaki satırı ekleyin:

Dav On

Aşağıdaki satırın httpd.conf uncommented içinde olduğundan emin olun:

LoadModule dav_fs_module modules/mod_dav_fs.so

Ondan sonra hazırsın. Aşağıdakileri kullanarak Apache Webserver'ı yeniden başlatın:

service httpd restart

Ayrıca sunucudaki tüm git depo dosyalarının pache: apache kullanıcısı ve grup tarafından yazılabilir olduğundan emin olun:

chown -R apache:apache /var/www/html/your_git_repository

Aksi takdirde, doğru izinleri ayarlayamamak "PUT hatası: kıvrılma sonucu = 22, HTTP kodu = 403", "git push" gerçekleştirirken sonuçlanır.

Şimdi sadece istemci makinenizden bir "git" yapın ve herkes çalışmalıdır.


Kullanıcılar bu kafesten kurtulabilmek eğer Not ama apcahe bir hata bkz yaklaşık almak paket kaydeder stackoverflow.com/questions/792611/...

2
Bu işe yarar, ancak DAV gerekli değildir ve aslında smart-http'den çok daha yavaş performans gösterir.

4

HTTP üzerinden klonladığınız bir depoya basamazsınız. URL'yi bir ssh://veya bir git://tür URL olarak güncellemeniz gerekir .


Aynı klon komutunu kullandım. Yanlış silmeyi yapmadan önce işe yaradı ....

Ne ile var git remote -v?
Mighty Rubber Duck

Tamamen doğru değil. DAV'ın etkin olduğunu varsayarak depolara geri dönebilirsiniz.

6
Bu yanlış. 1.6.6'dan beri Git akıllı http desteklerini ve apache ve git-http-backend'i kullanarak çekiyor.

3

.Git / config dosyanızın aşağıdaki bölümünü düzenleyin:

[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = http://git.repository.url/repo.git

için

[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = http://username:password@git.repository.url/repo.git

O zaman dene git push origin master.

Diğer depo URL'leri için yapılandırma dosyalarınızdaki kimlik doğrulama ayrıntılarını gerektiği gibi düzenleyin ve gerekli şubeye basın.


Not: Bu yöntemi kullandım ve sorunumu çözdüm - ancak şifreyi config dosyasında saklamak yanlış görünüyordu, bu yüzden bıraktım (istenmesini umarak) ve bu şekilde kullanabildim.
chris

git remote set-url origin ...de çalışır.
Maximilian Hils

1

Git-http-backend, ldap authentication config ile basma işleminde de aynı problem vardı.
Sonunda çözümü buldum ve bu sunucu hatası sorusunda açıkladım

Belki benzer problemi olan birine yardım eder.


0

Harika

başka hatalarım vardı ama işe yarıyor!

açıklamaya çalışıyorum:

ANCAK, şifreyi push mesajındaki metinden nasıl gizleyebilirim?


-1

Bu aynı zamanda yanlış bir şifre girerseniz de olabilir.


Bunu hiç görmedim: Her zaman fatal: Authentication failedilk ben gelirim
Rup
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.