Git Remote: Kesalahan: fatal: kesalahan protokol: karakter panjang baris salah: Unab


120

Saya menyiapkan server git dan sekarang ingin mendorong repo saya dari klien. Saya menggunakan git push origin masterdan mendapatkan pesan kesalahan ini:

fatal: protocol error: bad line length character: Unab

Saya tidak tahu apa yang salah. Saya tidak tahu apa itu "Unab". Saya mencoba mengubah ukuran shell tetapi masih "Unab". Saya tidak dapat menemukan solusi untuk pesan kesalahan ini.

Saya menyiapkan server dengan "authorized_keys" dan SSH. (Saya dapat menyambungkannya, menggunakan SSH.)

Sepertinya ini masalah git?

BTW: Server diatur di VM Windows 7


Memiliki masalah serupa dengan "fatal: protokol error: karakter panjang baris buruk: Ini", pesan kesalahan saya adalah "Akun ini saat ini tidak tersedia."
hj '21

Jawaban:


117

Pesan kesalahan ini agak tumpul, tetapi sebenarnya yang coba diberitahukan kepada Anda adalah bahwa server jarak jauh tidak membalas dengan respons git yang tepat. Akhirnya, ada masalah di server yang menjalankan git-receive-packproses tersebut.

Dalam protokol Git, empat byte pertama harus menjadi panjang baris. Sebaliknya, mereka adalah karakternya Unab... yang mungkin merupakan awal dari pesan kesalahan. (yaitu, mungkin " Unable to..." melakukan sesuatu).

Apa yang terjadi saat Anda lari ssh <host> git-receive-pack <path-to-git-repository>? Anda akan melihat pesan kesalahan bahwa klien git Anda sedang muntah dan Anda mungkin dapat memperbaikinya.


10
Itu, dan ssh <host> /bin/trueseharusnya tidak menghasilkan apa pun.
Stefan Näwe

9
Saya mengalami masalah yang sama dan penyebabnya adalah 'echo ".bashrc"' di .bashrc saya, jadi bukannya "fatal: protokol kesalahan: karakter panjang baris buruk: Unab" Saya melihat "fatal: kesalahan protokol: panjang baris buruk karakter: .bas ".
snarkyname77

4
Benar, itu juga masalah saya: saya .bashrcdi mesin yang meng-host repositori Git yang saya coba tarik memiliki baris yang menghasilkan gema ke output standar. (Artinya, saya adalah pemilik repositori pada mesin jarak jauh, jadi saya .bashrcyang menyebabkan masalah.) Saya menggunakan trik yang diberikan oleh pengguna ruslo dalam jawaban lain, yaitu mengarahkan output perintah itu dari stdout ke stderr ( some_command 1>&2). Setelah itu, git pulldikerjakan kembali.
Teemu Leisti

2
Dengan perintah di atas, output hanya hang. Ini mencantumkan semua cabang saya, satu per baris, dan kemudian pada baris tercetak terakhir saya mendapatkan output 0000 dan kursor segera setelahnya seolah-olah baris lain harus ditulis tetapi tidak pernah selesai.
demongolem

2
Saya tidak suka membahas masalah yang sudah berusia tujuh tahun, tetapi saya mendapatkan masalah 0000 yang sama dengan git-accept-pack. Itu menggantung di sana sampai saya menekan kembali empat kali, pada saat itu ia melaporkan kesalahan protokol yang sama dan berhenti.
Mark E. Hamilton

60

Saya mengalami masalah serupa, tetapi pesan kesalahan tepatnya adalah:

fatal: kesalahan protokol: karakter panjang baris salah: Usin

Ini di Windows, dengan GIT_SSHset ke jalur plink.exePuTTY.

Kemungkinan masalah dan solusinya:

  • Pastikan jalur ke plink.exebenar. Jalur gaya Unix juga berfungsi dengan baik, misalnya/c/work/tools/PuTTY/plink.exe
  • Pastikan agen kunci PuTTY ( pageant.exe) sedang berjalan
  • Pastikan agen kunci berisi kunci yang valid untuk mengakses server

7
Saya memiliki masalah yang sama di Windows dan ternyata menjadi penyebab utama yang sama karena alasan yang berlawanan. Saya mencoba menggunakan Cygwin (dan Git SSH yang disematkan) tetapi GIT_SSH disetel ke C: \ ... \ plink.exe yang menyebabkan konflik. Setelah saya menghapus ini semuanya bekerja dengan baik.
Matt Holtzman

11
Menghapus entri GIT_SSH dari variabel lingkungan melakukan trik untuk saya
chamalabey

Kesalahan serupa setelah memutakhirkan GitExt harus memulai ulang kontes dan mengimpor kembali file kunci .ppk.
Bill Dolan

9
Saya hanya lupa memuat kunci pribadi di kontes yang berakhiran fatal: protocol error: bad line length character: git@. Sungguh pesan kesalahan yang menyesatkan.
Ludwig

1
Dalam kasus saya, kontes (Windows 10) tidak berjalan. Setelah saya memulainya dan menambahkan kunci pribadi ke dalamnya, ini Baru Saja Bekerja.
April

28

Untuk pengguna GitExtension:

Saya menghadapi masalah yang sama setelah memutakhirkan git ke 2.19.0

Larutan:

Alat> Setelan> Ekstensi Git> SSH

Pilih [ OpenSSH ] daripada [ Putty ]

masukkan deskripsi gambar di sini


Ini persis seperti yang telah saya lakukan, ketika Anda mendapatkan kesalahan fatal: protocol error: bad line length character: git@. Pastikan kunci SSH dibuat dan ditambahkan ke GitLab . Mungkin ekstensi Git perlu dimulai ulang.
pengujian

20

Saya mengalami masalah yang sama setelah menginstal GIT di Windows. Pada awalnya itu berhasil; kemudian, sehari kemudian (setelah PC reboot), tidak lagi, dan saya mendapatkan ini:

$ git pull
fatal: protocol error: bad line length character: git@

Masalahnya adalah setelah reboot, "pageant.exe" Putty yang dijalankan secara otomatis tidak lagi memiliki kunci pribadi yang aktif. Saat Anda menambahkan kunci dalam kontes, itu bukan pengaturan yang tetap secara default. Saya hanya perlu menambahkan kunci lagi, dan berhasil dengan baik. Jadi, untuk kasus itu, perlu membuat pagenant memuat kunci secara otomatis, seperti yang dibahas di sini:

https://www.digitalocean.com/community/tutorials/how-to-use-pageant-to-streamline-ssh-key-authentication-with-putty


Bagi saya situasinya adalah bahwa di Visual studio saya mendapat kesalahan: "Git gagal dengan kesalahan fatal. Kesalahan protokol: karakter panjang baris buruk: gitu" setiap kali Windows di-restart. Proses kontes tidak dimulai sama sekali. Saya perlu menggunakan misalnya TortoiseGit yang memecahkan masalah ini di latar belakang dan kemudian GIT bekerja di studio Visual seperti pesona.
Honza P.

18

Mungkin Anda memiliki pernyataan di server .bashrc yang menghasilkan keluaran. Saya, misalnya punya ini:

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"
rvm use ruby-1.9.3-p194@rails32

Dalam hal ini, keluaran dari penggunaan rvm akan (salah) diartikan sebagai berasal dari git. Jadi gantilah dengan:

rvm use ruby-1.9.3-p194@rails32 > /dev/null

Dalam kasus saya (windows 10), masalahnya adalah output dari beberapa perintah terkait buruh pelabuhan pada skrip init.cmd startup cmd saya (yang saya buat dengan instruksi tersebut: stackoverflow.com/questions/17404165/…). tapi prinsipnya sama. Terima kasih!
ET-CS

Ini adalah kasus saya. Saya memiliki perintah 'banner' di .bashrc saya. Mengomentarinya memperbaiki masalah. Terima kasih :).
jamie


10

Anda dapat mengarahkan keluaran apa pun dari .bashrcke stderr:

# inside .bashrc
echo 'some error/warning/remind message' 1>&2

git akan mengabaikan simbol ini


Itu berhasil untuk saya. Saya punya pernyataan rvm use 2.0.0-p353di saya .bashrc, yang pasti membingungkan git pull. Setelah menambahkan 1>&2dan mencoba lagi, git pullbekerja dengan baik.
Teemu Leisti

7

Saya mengalami masalah serupa di Windows menggunakan Git Bash. Saya terus mendapatkan kesalahan ini saat mencoba melakukan klon git. Repositori berada di kotak Linux dengan GitLab diinstal.

git clone git@servername:path/to/repo
fatal: protocol error: bad line length character: git@

Saya memastikan kunci ssh dibuat. Kunci publik ditambahkan di GitLab. Ssh-agent sedang berjalan dan kunci yang dihasilkan telah ditambahkan ( tautan github ).

Saya kehabisan opsi dan akhirnya mencoba menutup Git Bash dan membukanya lagi dengan mengklik kanan 'Run as Administrator'. Bekerja setelah itu.


Saya melihat hal yang sama (Windows 10 64-bit) tetapi menjalankan sebagai administrator tidak memperbaikinya.
Ed Avis

4
Saya punya firasat tentang apa yang menyebabkan ini. Jika Anda tidak memiliki ssh keypair yang diatur (atau tidak dapat dibaca karena beberapa alasan) maka ssh meminta kata sandi. Pada Windows tidak ada perbedaan yang jelas antara keluaran standar dan keluaran konsol, jadi prompt kata sandi masuk ke stdout: "git @ anything's password:". Ini dilihat oleh git sebagai keluaran protokol yang rusak.
Ed Avis

@EdAvis Terima kasih! Saya memiliki masalah yang sama dan setelah membaca komentar Anda, saya memeriksa dua kali agen kunci saya (yang biasanya dijalankan saat startup di mesin saya). Ternyata itu tidak berjalan karena suatu alasan ...
Griddo

5

Ini mungkin membantu seseorang. Ketika saya mencoba mengkloning proyek dari instans EC2, saya mendapatkan kesalahan di bawah ini:

Cloning into 'repo1'...
fatal: protocol error: bad line length character: logi

Resolusi untuk saya mencakup langkah-langkah di bawah ini:

  1. Pastikan kunci SSH (publik) ditambahkan / diperbarui dalam instance EC2.
  2. Pastikan agen otentikasi (dalam kasus saya, Pageant = Putty Authentication Agent) sedang berjalan dan kunci pribadi yang sesuai dimuat.
  3. Gunakan ID kunci SSH EC2 sebagai kunci publik untuk git clone. Contoh:

    git clone ssh: // {ID Kunci SSH}@someaccount.amazonaws.com/v1/repos/repo1


4
Catatan: Ini karena Anda menggunakan plink, dan jika Anda melakukannya plink <server_name> ls, hal pertama yang dicetak plink ke stdout adalah login as, yang tampaknya coba ditafsirkan oleh git sebagai sesuatu yang penting. Perbaikan cepat adalah dengan sederhana unset GIT_SSHdan unset SVN_SSH. Info lebih lanjut di sini
Pod

@Pod Anda benar, di windows perintah ini akan membantu: set GIT_SSH=danset SVN_SSH=
Maksim Kostromin

Saya memiliki masalah yang sama dengan TFS. Setelah menambahkan id kunci semuanya berfungsi dengan baik, terima kasih!
Andre Hofmeister


3

Periksa file startup Anda pada akun yang digunakan untuk menghubungkan ke mesin jarak jauh untuk pernyataan "echo". Untuk shell Bash, ini akan menjadi .bashrc dan .bash_profile Anda, dll. Edward Thomson benar dalam jawabannya tetapi masalah khusus yang saya alami adalah ketika ada cetakan boiler-plate saat login ke server melalui ssh. Git akan mendapatkan empat byte pertama dari pelat-boiler itu dan memunculkan kesalahan ini. Sekarang dalam kasus khusus ini saya akan menebak bahwa "Unab" sebenarnya adalah karya "Unable ..." yang mungkin menunjukkan bahwa ada sesuatu yang salah pada host Git.


3

Dalam kasus saya setelah mengambilnya ditulis: fatal: protocol error: bad line length character: Pass. Juga setelah mendorong saya punya: fatal: protocol error: bad line length character: git@ Done.

Setelah reboot Windows saya harus memulai "PuTTY agent" (pageant.exe) lagi dan menambahkan kunci pribadi yang menghilang dari daftar kunci.


2

FYI Saya mendapat pesan kesalahan yang sama ini setelah saya mengupgrade kontainer CentOS6 ke CentOS7 - beberapa operasi git mulai gagal saat membangun kontainer, mis.

# git remote show origin
fatal: protocol error: bad line length character: Inva

Menjalankan ssh memberi saya kesalahan yang bisa saya cari:

# ssh git@bitbucket.org
Invalid clock_id for clock_gettime: 7

Itu membawa saya ke https://github.com/wolfcw/libfaketime/issues/63 di mana saya menyadari bahwa saya telah lupa saya memiliki LD_PRELOAD=/usr/local/lib/faketime/libfaketime.so.1Dockerfile orang tua. Mengomentari itu memperbaiki kesalahan.


2

Dalam kasus saya, masalahnya adalah 32-bit Putty dan pageant.exe - ia tidak dapat berkomunikasi dengan TortoisePlink.exe 64-bit. Mengganti Putty 32-bit dengan versi 64-bit menyelesaikan masalah.


2

Saya mengalami kesalahan yang sama "fatal: protocol error: bad line length character: shmi" Dimana shmiadalah nama pengguna dalam kasus saya. Saya mengganti SSH dari PuTTY ke OpenSSH "Git Extensions->Settings->SSH". Itu membantu.


1

Saya memiliki masalah yang sama dengan Christer Fernstrom. Dalam kasus saya, itu adalah pesan yang saya masukkan ke .bashrc saya yang mengingatkan saya untuk melakukan pencadangan ketika saya belum melakukannya dalam beberapa hari.


1

Hal berikut dapat membantu seseorang: Saat mencoba menggandakan proyek yang saya miliki di instans AWS EC2 saya, saya mendapatkan kesalahan berikut:

Cloning into 'AWSbareRepo'...
fatal: protocol error: bad line length character: Plea

Ini disebabkan karena mencoba ssh sebagai root, bukan EC2-USER. jika Anda benar-benar ssh tanpa melakukan klon git ... Anda akan melihat pesan kesalahan dalam sesuatu di sepanjang baris "Harap masuk dengan ec2-user" Setelah saya melakukan klon git sebagai pengguna ec2, itu bagus.


1

Saya juga mengalami kesalahan itu sesekali, tetapi jika terjadi, itu berarti cabang saya tidak mutakhir jadi saya harus melakukannya git pull origin <current_branch>


1

Git tidak meminta kata sandi dan gagal dengan pesan samar serupa "fatal: protokol error: karakter panjang baris buruk: pengguna" jika Anda tidak memiliki pengaturan otentikasi kunci pribadi Anda juga.

https://www.digitalocean.com/community/tutorials/how-to-configure-ssh-key-based-authentication-on-a-linux-server memberi tahu cara menentukan kunci publik di server. Pada dasarnya tambahkan kunci publik ke ~ / .ssh / authorized_keys atau ~ / .ssh / authorized_keys2

Saya harus sedikit kesulitan tentang cara memberikan kunci pribadi ke Git Bash di mesin windows. Jawaban Dan McClain di /server/194567/how-do-i-tell-git-for-windows-where-to-find-my-private-rsa-key/382801#382801 menjelaskan hal itu. Satu tambahan untuk jawabannya, dalam kasus saya file kunci pribadi diharapkan diberi nama id_rsa.pub


1

Bagi saya menambahkan detail host yang sama ke dalam Putty dengan kunci pribadi (ubah dengan puttygen) berfungsi. Perintah git bash apa pun setelah itu tidak memiliki masalah.


1

Jika Anda menggunakan Putty. Kemudian pastikan untuk menjalankan Pageant dan kunci pribadi Anda dimuat di Pageant (klik kanan mouse pada ikon Pageant di Taskbar dan klik "View keys" pada menu yang muncul).

Sebaliknya saat Anda melakukannya di cmd.exe:

git clone ssh://name@host:/path/to/git/repo.git

Anda mendapatkan pesan ini "fatal: protokol error: karakter panjang baris salah:"


1

TL; DR: Do tidak menghilangkan username@di URL remote ketika pada Windows.

Di Linux dan Windows dengan ssh default, Anda dapat menghilangkan nama pengguna dari URL jarak jauh, seperti:

git clone server-name:/srv/git/repo-name

Karena perilaku default ssh adalah hanya menggunakan nama pengguna apa pun yang saat ini Anda gunakan untuk masuk. Jika Anda menggunakan Windows dan telah mengatur git untuk digunakan plink.exesehingga Anda dapat menggunakan kunci yang dimuat di Anda pageant, maka ini tidak akan berfungsi, karena plinktidak memiliki perilaku nama pengguna otomatis yang sama, yang mengakibatkan pesan kesalahan samar tersebut, karena akan prompt untuk nama pengguna:

$ plink server-name
login as: _

Melawan:

$ plink username@server-name
...logs you in...

Jika Anda sudah mengkloning repositori, entah bagaimana Anda dapat memperbaiki remote di Anda .git/configdengan menambahkan username@ke URL jarak jauh.


Menambahkan nama pengguna ke remote dengan git remote set-url origin myusername@...membantu saya.
Maxim Suslov

0

Periksa apakah akses Shell diizinkan di server.


milikku adalah "Hai g". ternyata saya mengikuti beberapa situs web Pengaturan Keamanan dan sekarang login git saya mengatakan "Hai git! Anda telah berhasil mengautentikasi, tetapi saya tidak menyediakan akses shell interaktif.". rasa saya harus menghapus itu ....
jangan terang

0

Kesalahan diubah menjadi: fatal: protokol kesalahan: karakter panjang baris buruk: fata

setelah menambahkan lokasi git-upload-pack ke jalur sistem.

Masalahnya tampaknya berupa tanda kutip yang ditambahkan di sekitar nama repositori: Mencari dengan alat seperti Monitor Proses (dari internal sys), yang ditambahkan oleh klien git. Tampaknya menjadi masalah jendela khusus git.

Saya mencoba baris perintah yang sama pada prompt server: kesalahan penuh adalah "fatal: bukan repositori yang diberikan (atau salah satu direktori induk): .git"

Kesimpulannya, bagi saya ini seperti bug perangkat lunak. Harap diperhatikan bahwa saya bukan ahli git, ini pertama kali saya menggunakan git, saya berasal dari subversi dan perforce.


0

Kami juga mengalami ini.

Counting objects: 85, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (38/38), done.
Writing objects: 100% (38/38), 3.38 KiB | 0 bytes/s, done.
Total 38 (delta 33), reused 0 (delta 0)
Auto packing the repository for optimum performance.
fatal: protocol error: bad line length character: Remo
error: error in sideband demultiplexer

Saya tidak tahu detail detail tentang apa yang salah, tetapi dalam kasus kami yang memicunya adalah bahwa disk di server penuh.


0

Ini bisa menjadi akses keamanan pada mesin Anda, apakah Anda menjalankan Pageant (yang merupakan agen dempul)?


0

Anda selalu dapat memiliki tautan http ke proyek git Anda. Anda dapat menggunakannya sebagai pengganti ssh link. Ini hanyalah opsi yang Anda miliki


0

Nah, saya mengalami masalah yang sama (Windows 7). Cobalah untuk mendapatkan repo dengan kata sandi. Saya menggunakan Git Bash + Plink (variabel lingkungan GIT_SSH) + Pageant. Menghapus GIT_SSH (sementara) membantu saya. Saya tidak tahu mengapa saya tidak dapat menggunakan login by pass dan login dengan RSA pada saat yang sama ...


0

Jawaban terlambat di sini, tapi berharap ini akan membantu seseorang. Jika ini adalah kesalahan protokol, ia harus melakukan sesuatu dengan git lokal Anda yang tidak dapat berkomunikasi dengan git jarak jauh. Ini bisa terjadi jika Anda mengkloning repo melalui ssh dan beberapa saat kemudian, Anda kehilangan kunci repo atau agen ssh Anda tidak dapat menemukan kunci tersebut lagi.

Larutan

  1. Buat kunci baru dan tambahkan repo git Anda atau konfigurasikan agen ssh Anda untuk memuat kunci jika Anda masih memiliki kunci dengan Anda & tidak dengan orang lain;)

  2. Perbaikan cepat lainnya adalah pergi ke .gitdirektori Anda dan edit configfile [remote "origin"] urldari gitmenjadi httpsehingga kunci ssh tidak diperlukan untuk mendorong dan itu akan kembali untuk menanyakan nama pengguna dan kata sandi Anda.

    [remote "origin"]
    url = git@gitlab.*****.com:****/****.git
    fetch = +refs/heads/*:refs/remotes/origin/*
    

Mengubah

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

0

Mengubah exectuable ssh dari builtin ke nativ di bawah pengaturan / kontrol versi / git melakukan trik untuk saya.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.