git push fatal gagal

24

Saya entah bagaimana menghapus seluruh direktori cabang kode saya. Saya mengkloning yang baru. Itu bekerja dengan baik kecuali mendorong.

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

git pull bekerja, meskipun. Bagaimana saya bisa memperbaikinya?


sumber
1
Silakan, baca manual ini di sini dan perhatikan poin tentang http.receivepack.
hhh

Jawaban:

33

Saya membuat kesalahan dengan menggunakan https alih-alih ssh untuk salinan baru. Sejak itu saya membuat modifikasi dan melakukan tetapi tidak bisa mendorong karena alasan yang jelas.

Untuk memulihkan, saya dengan mudah mengubah bagian [remote "origin"] di .git / config dari

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

untuk

url = [email protected]: AIFDR / riab_core.git

Setelah itu, saya bisa mendorong lagi.


sumber
2
Tidak perlu pindah ke protokol lain, baca jawaban saya di bawah ini jika Anda ingin mendorong http.
Basil A
1
Setuju dengan Basil, ini tidak perlu, dan tidak mungkin di beberapa lingkungan perusahaan yang memiliki akses terbatas melalui firewall, dll.
... masalahnya adalah git-http-push failed, saya melihat op sedang mencoba untuk mengatur hal-hal baik di http atau https, -1.
hhh
14

Dorong HTTP lebih cepat dengan hanya git - webDAV tidak diperlukan

Dukungan "smart-http" baru sejak git 1.6.6. Metode baru memungkinkan seluruh paket untuk dikirim sekaligus, dan bukan sebagai file individual.

Anda juga dapat menggunakan gitweb untuk menyediakan URL yang dapat dijelajahi di lokasi yang sama.

Catatan: Karena akses dikontrol oleh apache Anda dapat menambahkan persyaratan Auth (htaccess atau ldap, dll) ke pengaturan untuk setiap repositori.

Jawaban ini mengasumsikan Anda memiliki server jarak jauh dan ingin menambah / memperbaiki dukungan http.

PERTAMA: Periksa log apache, kemungkinan izinnya ditolak / tidak dapat menemukan kesalahan ketika apache mencoba mengeksekusi skrip cgi yang didukung git-http.

Menambahkan Dukungan HTTP ke git

Buat saja file git_support.conf baru, dan sertakan dalam apache (tambahkan sertakan pernyataan di 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/

Hasilnya adalah kemampuan untuk mendorong / menarik:

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

Dan Anda dapat menelusuri perubahan itu secara online .. gitweb menyediakan antarmuka yang dapat dijelajahi

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

Eddie
sumber
Ketika saya menjalankan baris PENTING tentang pengguna, baris 7, saya mengerti "SetEnv takes 1-2 arguments, an environment variable name and optional value to pass to CGI."- mengapa?
hhh
Saya kira nilainya kosong, jadi setenv hanya melihat 0 argumen. Karena apache menggunakan aturan pengalihan, mungkin REMOTE_USER kosong, jadi kami ambil REDIRECT_RMEOTE_USER. Anda harus dapat membuat penugasan opsional jika RMEOTE_USER sudah ditentukan (atau lebih tepatnya REDIRECT pengguna kosong). httpd.apache.org/docs/2.0/mod/mod_setenvif.html#setenvif
7

Untuk mengaktifkan " git push " melalui http, Anda harus mengaktifkan WebDAV di server web. Untuk melakukannya untuk Apache Webserver, cukup edit file konfigurasi:

vim /etc/httpd/conf/httpd.conf

Kemudian cari baris yang dimulai dengan:

<Directory "/var/www/html">

Tambahkan baris berikut setelahnya:

Dav On

Pastikan Anda memiliki baris berikut juga di httpd.conf tanpa komentar:

LoadModule dav_fs_module modules/mod_dav_fs.so

Setelah itu kamu siap. Mulai ulang Apache Webserver menggunakan:

service httpd restart

Pastikan juga agar semua file repositori git di server dapat ditulis oleh pache: pengguna dan grup apache menggunakan:

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

Jika tidak, gagal untuk mengatur izin yang benar akan menghasilkan "kesalahan PUT: hasil curl = 22, kode HTTP = 403" saat melakukan "git push".

Sekarang cukup lakukan "git push" dari mesin klien Anda dan semuanya akan bekerja.

Basil A
sumber
Catatan, jika pengguna dapat melewati rintangan ini, tetapi lihat kesalahan dalam log apcahe tentang paket-terima stackoverflow.com/questions/792611/…
2
Ini akan berhasil, tetapi DAV tidak diperlukan, dan benar-benar melakukan jauh lebih lambat daripada smart-http.
4

Anda tidak dapat mendorong repositori yang Anda kloning melalui HTTP. Anda perlu memperbarui URL ke salah satu ssh://atau git://jenis URL.

Bebek Karet Perkasa
sumber
Saya menggunakan perintah klon yang sama. Itu berhasil sebelum sampai saya membuat penghapusan yang salah ....
apa yang Anda miliki dengan git remote -v?
Bebek Karet Perkasa
Tidak sepenuhnya benar. Anda dapat mendorong kembali ke repositori, dengan asumsi DAV diaktifkan.
6
Ini salah. Git sejak 1.6.6 mendukung push dan pull http pintar menggunakan apache dan git-http-backend.
3

Edit bagian berikut dari file .git / config Anda:

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

untuk

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

Lalu coba git push origin master.

Edit detail autentikasi dalam file konfigurasi Anda untuk URL repositori lain sebagaimana diperlukan dan dorong ke cabang yang diperlukan.

Deepak
sumber
Catatan: Saya menggunakan metode ini dan itu memecahkan masalah saya - namun saya pikir menyimpan kata sandi dalam file konfigurasi sepertinya salah, jadi saya meninggalkannya (berharap diminta untuk itu), dan dapat menggunakannya seperti itu.
chris
git remote set-url origin ...berfungsi juga.
Maximilian Hils
1

Saya memiliki masalah yang sama dengan operasi push dengan git-http-backend, konfigurasi otentikasi ldap.
Akhirnya saya menemukan solusinya dan menjelaskannya dalam pertanyaan serverfault ini

Mungkin itu akan membantu seseorang dengan masalah serupa.

gaspar
sumber
0

Besar

saya punya kesalahan lain tetapi berhasil!

saya mencoba menjelaskan:

TAPI bagaimana menyembunyikan kata sandi dari teks pada pesan push?

pengguna201304010101
sumber
-1

Ini juga dapat terjadi jika Anda memasukkan kata sandi yang salah.

sacha
sumber
Saya belum pernah melihat itu: Saya selalu mendapatkan yang fatal: Authentication failedpertama
Rup