Git Remote: Hata: ölümcül: protokol hatası: hatalı satır uzunluğu karakteri: Unab


120

Bir git sunucusu kuruyorum ve şimdi ilk olarak depomu istemciden göndermek istiyorum. git push origin masterBu hata mesajını kullandım ve aldım:

fatal: protocol error: bad line length character: Unab

Neyin yanlış olduğunu bilmiyorum. "Unab" ın ne olduğunu bilmiyorum. Kabuğu yeniden boyutlandırmaya çalıştım ama hala "Unab". Bu hata mesajı için bir çözüm bulamıyorum.

Sunucuyu "yetkili_keys" ve SSH ile kurdum. (SSH kullanarak ona bağlanabilirim.)

Git sorunu gibi görünüyor?

BTW: Sunucu bir Windows 7 VM'de kuruldu


"Ölümcül: protokol hatası: hatalı satır uzunluğu karakteri: Bu" ile benzer bir sorun vardı, hata mesajım "Bu hesap şu anda kullanılamıyor."
hj '

Yanıtlar:


117

Bu hata mesajı biraz abartılı ama aslında size anlatmaya çalıştığı şey, uzak sunucunun düzgün bir git yanıtı vermediği. Sonuçta, git-receive-packişlemi çalıştıran sunucuda bir sorun vardı .

Git protokolünde, ilk dört bayt satır uzunluğu olmalıdır. Bunun yerine, onlar karakterdi Unab... ki bu muhtemelen bir tür hata mesajının başlangıcıdır. (yani, muhtemelen " Unable to..." bir şeyler yapmaktır).

Koşarsan ne olur ssh <host> git-receive-pack <path-to-git-repository>? Git istemcinizin açık bıraktığı hata mesajını görmelisiniz ve bunu düzeltebilirsiniz.


10
Bu ve ssh <host> /bin/truehiçbir şey çıkarmamalı.
Stefan Näwe

9
Aynı sorunu yaşadım ve nedeni .bashrc dosyamda bir "echo" .bashrc "'idi, bu nedenle" ölümcül: protokol hatası: hatalı satır uzunluğu karakteri: Unab "görüyorum" fatal: protokol hatası: hatalı satır uzunluğu karakter: .bas ".
snarkyname77

4
Doğru, benim de sorunum buydu: .bashrcÇekmeye çalıştığım Git deposunu barındıran makinemde , standart çıktıya yankı oluşturan bir satır vardı. (Yani, uzak makinedeki deponun sahibiydim, bu yüzden .bashrcsoruna neden olan bendim.) Ruslo kullanıcısının verdiği hileyi başka bir yanıtta kullandım, yani bu komutun çıktısını stdout'tan stderr'e ( some_command 1>&2). Ondan sonra git pulltekrar çalıştı.
Teemu Leisti

2
Yukarıdaki komutla, çıktı kilitleniyor. Her satırda bir tane olacak şekilde tüm dallarımı listeler ve ardından son yazdırılan satırda çıktıyı 0000 ve imleci hemen sonra sanki başka bir satır yazılacakmış gibi alırım ama asla tamamlanmaz.
demongolem

2
Yedi yıllık bir sayıya çarpmaktan nefret ediyorum, ancak git-take-pack ile aynı 0000 sorununu alıyorum. Geri dönüş tuşuna dört kez basana kadar orada kalıyor, bu noktada aynı protokol hatasını bildiriyor ve çıkıyor.
Mark E. Hamilton

60

Benzer bir sorun yaşadım, ancak tam hata mesajı şuydu:

ölümcül: protokol hatası: hatalı satır uzunluğu karakter: Usin

Bu, Windows'ta, PuTTY'nin GIT_SSHyoluna ayarlanmış plink.exe.

Olası sorunlar ve çözümleri:

  • Giden yolun plink.exedoğru olduğundan emin olun . Unix tarzı yol da iyi çalışıyor, örneğin/c/work/tools/PuTTY/plink.exe
  • PuTTY ( pageant.exe) anahtar aracısının çalıştığından emin olun
  • Anahtar aracının, sunucuya erişmek için geçerli bir anahtar içerdiğinden emin olun

7
Windows'ta aynı sorunu yaşadım ve tam tersi nedenden dolayı aynı temel neden olduğu ortaya çıktı. Cygwin'i (ve gömülü Git SSH'yi) kullanmaya çalışıyordum, ancak GIT_SSH C: \ ... \ plink.exe olarak ayarlandı ve bu da bir çatışmaya neden oldu. Bunu çıkardıktan sonra her şey yolunda gitti.
Matt Holtzman

11
Ortam değişkenlerinden GIT_SSH girişini kaldırmak benim için hile yaptı
chamalabey

GitExt'i yükselttikten sonra benzer bir hata, pageant'ı yeniden başlatmak ve .ppk anahtar dosyasını yeniden içe aktarmak zorunda kaldı.
Bill Dolan

9
Sadece özel anahtarı ne sona erdiğinde yarışmaya yüklemeyi unuttum fatal: protocol error: bad line length character: git@. Ne kadar yanıltıcı bir hata mesajı.
Ludwig

1
Benim durumumda (Windows 10) yarışması çalışmıyordu. Bir kez başlatıp özel anahtarı ekledikten sonra, bu Çalıştı.
Nisan

29

GitExtension kullanıcıları için:

Git'i 2.19.0'a yükselttikten sonra aynı sorunla karşılaştım

Çözüm:

Araçlar> Ayarlar> Git Uzantıları> SSH

[ PuTTY ] yerine [ OpenSSH ] seçin

görüntü açıklamasını buraya girin


Hatayı aldığınızda ben de bunu yaptım fatal: protocol error: bad line length character: git@. SSH anahtarının oluşturulduğundan ve GitLab'a eklendiğinden emin olun . Belki de Git Uzantılarının yeniden başlatılması gerekliydi.
test

20

Windows'a GIT'yi yükledikten sonra da aynı tür bir sorunu yaşadım. İlk başta işe yaradı; sonra, bir gün sonra (bilgisayar yeniden başlatıldıktan sonra) artık olmadı ve şunu anladım:

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

Sorun, yeniden başlatmanın ardından, otomatik olarak başlatılan Putty "pageant.exe" özel anahtarının artık etkin olmamasıydı. Yarışmada bir anahtar eklediğinizde, bu varsayılan olarak kalıcı bir ayar değildir. Anahtarı tekrar eklemek zorunda kaldım ve iyi çalıştı. Bu nedenle, bu durumda, burada tartışıldığı gibi pagenant'ın anahtarı otomatik olarak yüklemesini sağlamak gerekir:

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


Benim için durum, Visual Studio'da hata almamdı: "Git ölümcül bir hatayla başarısız oldu. Protokol hatası: hatalı satır uzunluğu karakteri: gitu" Windows her yeniden başlatıldığında. Gösteri süreci hiç başlamadı. Bunu arka planda çözen örneğin TortoiseGit'i kullanmam gerekiyordu ve ardından GIT Visual Studio'da bir cazibe gibi çalıştı.
Honza P.

18

Belki sunucunun .bashrc dosyasında çıktı üreten bir deyiminiz vardır. Örneğin şuna sahiptim:

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

Bu durumda, rvm kullanımının çıktısı (yanlış) git'ten geliyormuş gibi yorumlanacaktır. Öyleyse şununla değiştirin:

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

(Windows 10) durumumda sorun, cmd başlangıç ​​init.cmd betiğimdeki bazı docker ile ilgili komutların çıktısıydı (bu komutlarla oluşturduğum: stackoverflow.com/questions/17404165/…). ama aynı prensip. teşekkür ederim!
ET-CS

Bu benim için böyleydi. .Bashrc dosyamda bir 'banner' komutu vardı. Yorumlamak sorunu çözdü. Teşekkür ederim :).
jamie

12

Git Extensions'ta SSH özel anahtarını yükledikten sonra bu sorun çözülür.


1
benim için - yarışmaya ssh özel anahtarı ekleniyor
Nick Grealy

10

Sen gelen herhangi bir çıktı yönlendirebilirsiniz .bashrciçin stderr:

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

git bu sembolleri yok sayacak


Bu benim için yaptı. rvm use 2.0.0-p353Kafamda .bashrckafa karıştıran bir ifade vardı git pull. Ekledikten 1>&2ve tekrar denedikten sonra git pulliyi çalıştı.
Teemu Leisti

7

Windows'ta Git Bash kullanarak benzer bir sorun yaşadım. Git klonu yapmaya çalışırken bu hatayı almaya devam ettim. Depo, GitLab yüklü bir Linux kutusundaydı.

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

Ssh anahtarının oluşturulduğundan emin oldum. Genel anahtar GitLab'a eklendi. Ssh aracısı çalışıyordu ve üretilen anahtar eklendi ( github bağlantısı ).

Seçeneklerim kalmadı ve sonunda Git Bash'i kapatmayı ve 'Yönetici Olarak Çalıştır'ı sağ tıklayarak tekrar açmayı denedim. Bundan sonra çalıştı.


Aynı şeyi görüyorum (Windows 10 64 bit) ancak yönetici olarak çalıştırmak sorunu çözmüyor.
Ed Avis

4
Buna neyin sebep olduğuna dair bir önsezim var. Eğer ssh anahtar çiftini ayarlamadıysanız (veya herhangi bir nedenle okunamıyorsa), ssh bir parola ister. Windows'ta standart çıktı ile konsol çıktısı arasında net bir ayrım yoktur, bu nedenle parola istemi stdout'a gider: "git @ her neyse parolası:". Bu, git tarafından bozuk protokol çıktısı olarak görülür.
Ed Avis

@EdAvis Teşekkürler! Aynı sorunu yaşadım ve yorumunuzu okuduktan sonra ana aracımı iki kez kontrol ettim (bu genellikle makinemde başlangıçta çalıştırılır). Bir nedenden dolayı çalışmadığı ortaya çıktı ...
Griddo

5

Benim için kısa süre önce eklediğim için

RequestTTY force

.ssh / config içine

bunu yorumlamak işe yaradı


Ve benim durumumda bir LocalCommandşeyi yankılamak için bir yapılandırma ekledim
Phu Ngo

5

Bu birine yardımcı olabilir. Bir EC2 bulut sunucusundan bir projeyi klonlamaya çalışırken aşağıdaki hatayı alıyordum:

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

Benim için çözüm aşağıdaki adımları içerir:

  1. EC2 bulut sunucusunda SSH anahtarının (genel) eklendiğinden / güncellendiğinden emin olun.
  2. Kimlik doğrulama aracısının (benim durumumda onun Pageant = Putty Kimlik Doğrulama Aracısı) çalıştığından ve ilgili özel anahtarın yüklendiğinden emin olun.
  3. Git klonu için genel anahtar için EC2 SSH anahtar kimliğini kullanın. Misal:

    git clone ssh: // {SSH Anahtar Kimliği}@someaccount.amazonaws.com/v1/repos/repo1


4
Not: Bunun nedeni, plink kullanıyor olmanızdır ve bunu yaparsanız plink <server_name> ls, stdout'a plink yazdırdığı ilk şey, git'in login asönemli bir şey olarak yorumlamaya çalışıyor gibi görünmesidir. Hızlı bir düzeltme, basitçe unset GIT_SSHve unset SVN_SSH. Daha fazla bilgi burada
Pod

@Pod haklısın, pencerelerde bu komutlar yardımcı olmalı: set GIT_SSH=veset SVN_SSH=
Maksim Kostromin

TFS ile aynı sorunu yaşadım. Anahtar kimliği ekledikten sonra her şey yolunda gidiyor, teşekkürler!
Andre Hofmeister

3

"Echo" ifadeleri için uzak makineye bağlanmak için kullanılan hesaptaki başlangıç ​​dosyalarınızı kontrol edin. Bash kabuğu için bunlar sizin .bashrc ve .bash_profile dosyanız vb. Olacaktır. Edward Thomson cevabında doğrudur, ancak yaşadığım özel bir sorun, ssh aracılığıyla bir sunucuya giriş yapıldığında bir kazan plakası çıktısı olmasıydı. Git o kazan plakasının ilk dört baytını alacak ve bu hatayı artıracaktır. Şimdi bu özel durumda, "Unab" ın aslında "Unable ..." çalışması olduğunu tahmin edeceğim ki bu muhtemelen Git ana bilgisayarında başka bir sorun olduğunu gösterir.


3

Benim durumumda sonra yazılmıştır getirme: fatal: protocol error: bad line length character: Pass. Ayrıca itmeden sonra aldım:fatal: protocol error: bad line length character: git@ Done .

Windows'u yeniden başlattıktan sonra, "PuTTY aracısını" (pageant.exe) yeniden başlatmam ve anahtar listesinden kaybolan özel bir anahtar eklemem gerekiyordu.


2

Bilginize Bir CentOS6 konteynerini CentOS7'ye yükselttikten sonra aynı hata mesajını aldım - bazı git işlemleri konteyneri oluştururken başarısız olmaya başladı, örn.

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

Ssh çalıştırmak bana arayabileceğim bir hata verdi:

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

Bu beni https://github.com/wolfcw/libfaketime/issues/63 adresine götürdü ve burada LD_PRELOAD=/usr/local/lib/faketime/libfaketime.so.1bir ana Dockerfile dosyam olduğunu unuttuğumu fark ettim . Bunu yorumlamak hatayı düzeltti.


2

Benim durumumda sorun 32-bit Putty ve pageant.exe idi - 64-bit TortoisePlink.exe ile iletişim kuramıyor. 32-bit Putty'yi 64-bit sürümle değiştirmek sorunu çözdü.


2

Benim durumumda kullanıcı adı "fatal: protocol error: bad line length character: shmi" nerede ise aynı hatayı shmialdım. SSH'yi PuTTY'den OpenSSH'ye içinde değiştirdim "Git Extensions->Settings->SSH". Yardımcı oldu.


1

Christer Fernstrom ile aynı sorunu yaşadım. Benim durumumda, .bashrc dosyama koyduğum ve birkaç gün içinde yedekleme yapmadığım halde bir yedekleme yapmayı hatırlatan bir mesajdı.


1

Aşağıdakiler birine yardımcı olabilir: AWS EC2 bulut sunucumda sahip olduğum bir projeyi klonlamaya çalışırken aşağıdaki hatayı alıyordum:

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

Bunun nedeni, EC2-USER yerine kök olarak ssh'ı denemekti. git klonu yapmadan gerçekten ssh yapıyorsanız ... "Lütfen ec2-user ile giriş yapın" satırlarında bir şeyde msg hatası göreceksiniz. Bir ec2 kullanıcısı olarak git klonu yaptıktan sonra iyi oldu.


1

Ben de arada bir bu hatayla karşılaşıyorum ama ortaya çıktığında şubemin güncel olmadığı anlamına geliyor bu yüzden yapmalıyım git pull origin <current_branch>


1

Git parola istemez ve özel anahtar kimlik doğrulama kurulumunuz yoksa, "ölümcül: protokol hatası: hatalı satır uzunluğu karakter: kullanıcı" gibi şifreli bir mesajla başarısız olur .

https://www.digitalocean.com/community/tutorials/how-to-configure-ssh-key-based-authentication-on-a-linux-server , sunucuda genel anahtarın nasıl belirleneceğini anlatır. Temel olarak genel anahtarı ~ / .ssh / yetkili_keys veya ~ / .ssh / yetkili_keys2'ye ekleyin

Windows makinesinde Git Bash'e özel anahtarın nasıl sağlanacağı konusunda biraz uğraşmam gerekti. Dan McClain'in /server/194567/how-do-i-tell-git-for-windows-where-to-find-my-private-rsa-key/382801#382801'deki cevabı bunu açıklıyor. Cevabına bir ek, benim durumumda özel anahtar dosyasının id_rsa.pub olarak adlandırılması bekleniyordu


1

Benim için aynı ana bilgisayar ayrıntılarını özel anahtarla Putty'ye eklemek (puttygen ile dönüştürmek) işe yaradı. Bundan sonraki herhangi bir git bash komutunda sorun yoktu.


1

Putty kullanırsanız. Ardından Pageant'ın çalıştığından ve özel anahtarınızın Pageant'a yüklendiğinden emin olun (Görev çubuğundaki Pageant simgesine fareyle sağ tıklayın ve açılan menüden "Tuşları Görüntüle" ye tıklayın).

Aksi takdirde cmd.exe'de yaptığınızda:

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

"ölümcül: protokol hatası: hatalı satır uzunluğu karakteri:" mesajını alırsınız


1

TL; DR: Do not omitusername@ zaman Windows üzerinde uzaktan URL'lerinizdeki.

Linux'ta ve varsayılan ssh ile Windows'ta, aşağıdaki gibi uzak URL'lerden kullanıcı adını çıkarabilirsiniz:

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

Çünkü ssh'nin varsayılan davranışı, şu anda oturum açmış olduğunuz kullanıcı adını kullanmaktır. Windows üzerindeyseniz ve kullanmak için git'i ayarladıysanız plink.exe, bu şekilde anahtarınızı kullanabileceksiniz pageant, o zaman bu çalışmayacaktır, çünkü plinkaynı otomatik kullanıcı adı davranışına sahip değildir ve bu şifreli hata mesajlarına neden olacaktır, çünkü kullanıcı adı istemi:

$ plink server-name
login as: _

Karşı:

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

Bir depoyu zaten bir şekilde klonladıysanız , uzak URL'ye .git/configekleyerek uzaktan kumandaları onarabilirsiniz username@.


Uzaktan kumandaya kullanıcı adı eklemek git remote set-url origin myusername@...bana yardımcı oldu.
Maxim Suslov

0

Sunucuda Kabuk erişimine izin verilip verilmediğini kontrol edin.


benimki "Merhaba g" idi. Bazı Güvenlik Kurulum web sitesini izlediğim ve şimdi git oturum açma bilgilerim "Merhaba git! Kimlik doğrulamasını başarıyla yaptınız, ancak etkileşimli kabuk erişimi sağlamıyorum." diyor. sanırım bunu kaldırmak zorundayım ....
parlak

0

Hata dönüştürülmüş: ölümcül: protokol hatası: hatalı satır uzunluğu karakter: fata

git-upload-pack'in konumunu sistem yoluna ekledikten sonra.

Sorun, depo adının etrafına eklenen bir kesme işareti gibi görünüyor: git istemcisi tarafından eklenen Process Monitor (sys internals'dan) gibi bir araçla bakmak. Git'e özgü bir pencere sorunu gibi görünüyor.

Sunucunun isteminde aynı komut satırını denedim: tam hata "ölümcül: belirli bir depo değil (veya ana dizinlerden herhangi biri): .git"

Sonuç olarak, bana bir yazılım hatası gibi görünüyor. Bir git uzmanı olmadığımı unutma, git'i ilk kez kullanıyorum, yıkıcılıktan ve performanstan geliyorum.


0

Bununla da karşılaştık.

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

Neyin yanlış gittiğine dair gitty detaylarını bilmiyorum, ama bizim durumumuzda onu tetikleyen, sunucudaki diskin dolu olmasıydı.


0

Makinenizde bir güvenlik erişimi olabilir, Pageant'ı çalıştırıyor musunuz (bu bir macun ajanıdır)?


0

git projenize her zaman http bağlantınız olabilir. Bunu ssh bağlantısı yerine kullanabilirsiniz. Bu sadece sahip olduğunuz bir seçenek


0

Ben de aynı sorunu yaşadım (Windows 7). Depoyu şifreyle almayı deneyin. Git Bash + Plink (ortam değişkeni GIT_SSH) + Pageant kullanıyorum. GIT_SSH'yi (geçici) silmek bana yardımcı oluyor. Neden aynı anda hem parola hem de RSA ile giriş yapamıyorum bilmiyorum ...


0

Burada geç cevap, ama umarım birine yardımcı olur. Bu bir protokol hatasıysa, yerel git ile uzak git ile iletişim kuramayan bir şey yapması gerekir. Depoyu ssh aracılığıyla klonladıysanız ve bir süre sonra, deponun anahtarlarını kaybettiyseniz veya ssh aracınız artık bu anahtarları bulamıyorsa bu gerçekleşebilir.

Çözüm

  1. Yeni bir anahtar oluşturun ve git deponuza ekleyin veya anahtarlar hala yanınızda ve başkasında yoksa anahtarları yüklemek için ssh aracınızı yapılandırın;)

  2. Diğer bir hızlı düzeltme, .gitdizininize gidip configdosyanın - [remote "origin"] urldan git- arasında düzenlenmesidir , httpböylece ssh anahtarlarına basmak gerekmez ve kullanıcı adınızı ve parolanızı sormaya geri döner.

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

Değişmek

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

0

Ssh exectuable'ı yerleşikten nativ'e ayarlar / sürüm kontrolü / git altında değiştirmek benim için hile yaptı.

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.