我设置了一个git服务器,现在想要从客户端推送我的repo。
我使用git push origin master
并收到此错误消息:
fatal: protocol error: bad line length character: Unab
我不知道出了什么问题。我不知道“Unab”是什么。我试图调整shell的大小,但它仍然是“Unab”。 我无法找到此错误消息的解决方案。
我使用“authorized_keys”和SSH设置服务器。 (我可以使用SSH连接到它。)
这似乎是一个git问题?
BTW:服务器在Windows 7 VM中设置
答案 0 :(得分:99)
此错误消息有点迟钝,但它实际上试图告诉您的是远程服务器没有使用正确的git响应进行回复。最终,运行git-receive-pack
进程的服务器出现问题。
在Git协议中,前四个字节应该是行长度。相反,它们是字符Unab
...这可能是某种错误信息的开始。 (也就是说,它可能是“Unable to...
”做某事。
运行ssh <host> git-receive-pack <path-to-git-repository>
时会发生什么?您应该看到您的git客户端正在进行操作的错误消息,您可以更正它。
答案 1 :(得分:48)
我有类似的问题,但确切的错误信息是:
致命:协议错误:错误的行长字符:Usin
这是在Windows中,GIT_SSH
设置为PuTTY的plink.exe
路径。
可能出现的问题和解决方案:
plink.exe
的路径正确无误。 Unix样式路径也可以正常工作,例如/c/work/tools/PuTTY/plink.exe
pageant.exe
)的密钥代理正在运行答案 2 :(得分:16)
在Windows上安装GIT后,我遇到了同样的问题。起初它起作用了;然后,一天后(PC重启后),它不再了,我得到了这个:
self.tableView.sectionIndexBackgroundColor = .black
问题是重启后,自动启动的Putty“pageant.exe”没有私钥活动了。在pageant中添加键时,默认情况下它不是持久性设置。我只需要再次添加密钥,它工作正常。因此,对于这种情况,有必要使pagenant自动加载密钥,如下所述:
答案 3 :(得分:16)
也许你在服务器的.bashrc中有一个产生输出的声明。我,例如有这个:
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"
rvm use ruby-1.9.3-p194@rails32
在这种情况下,rvm使用的输出将被(错误地)解释为来自git。所以用以下方法替换它:
rvm use ruby-1.9.3-p194@rails32 > /dev/null
答案 4 :(得分:11)
答案 5 :(得分:11)
在Git Extensions中加载SSH私钥后,此问题得到解决。
答案 6 :(得分:9)
您可以将.bashrc
的任何输出重定向到stderr
:
# inside .bashrc
echo 'some error/warning/remind message' 1>&2
git将忽略此符号
答案 7 :(得分:7)
我在使用Git Bash的Windows上遇到了类似的问题。在尝试进行git克隆时,我一直收到此错误。存储库位于安装了GitLab的Linux机器上。
git clone git@servername:path/to/repo
fatal: protocol error: bad line length character: git@
我确保生成了ssh密钥。公钥已添加到GitLab上。 ssh-agent正在运行,并且添加了生成的密钥(github link)。
我用完了选项,然后终于尝试关闭Git Bash并通过右键单击“以管理员身份运行”再次打开它。在那之后工作。
答案 8 :(得分:3)
在我的案例中,在获取之后写了:fatal: protocol error: bad line length character: Pass
。推后我得到了:fatal: protocol error: bad line length character: git@
Done
。
重新启动Windows后,我不得不再次启动“PuTTY agent”(pageant.exe)并添加一个从密钥列表中消失的私钥。
答案 9 :(得分:3)
这可能对某人有所帮助。当我尝试从EC2实例克隆项目时,我收到以下错误:
Cloning into 'repo1'...
fatal: protocol error: bad line length character: logi
我的决议包括以下步骤:
使用EC2 SSH密钥ID作为git clone的公钥。示例:
git clone ssh:// {SSH Key ID} @ someaccount.amazonaws.com / v1 / repos / repo1
答案 10 :(得分:3)
对我来说,这是因为我最近添加了
var data = ["aaa", "abc", "abd"];
var svg = d3.select("body").append("svg")
.attr("width", 200)
.attr("height", 200);
svg.selectAll("text")
.data(data)
.enter()
.append("text")
.attr("x", function(d,i) {
return 20 + 50 * i;
})
.attr("y", 100)
.text(function(d) { return d; });
进入.ssh / config
评论这个允许它工作
答案 11 :(得分:3)
检查用于连接到远程计算机的帐户上的启动文件,以获取“echo”语句。对于Bash shell,这些将是你的.bashrc和.bash_profile等.Edward Thomson在他的回答中是正确的,但我遇到的一个具体问题是当通过ssh登录到服务器时有一些样板打印输出。 Git将获得该锅炉板的前四个字节并引发此错误。现在在这个特定的情况下,我会猜测“Unab”实际上是“Unable ...”的工作,这可能表明Git主机上还有其他错误。
答案 12 :(得分:2)
在我的情况下,问题是32位Putty和pageant.exe - 它无法与64位TortoisePlink.exe进行通信。用64位版本替换32位Putty解决了这个问题。
答案 13 :(得分:2)
我遇到了同样的错误"fatal: protocol error: bad line length character: shmi"
在我的情况下,shmi
是用户名。
我在"Git Extensions->Settings->SSH"
中将SSH从PuTTY切换到OpenSSH。
它有所帮助。
答案 14 :(得分:1)
仅供参考我在将CentOS6容器升级到CentOS7后得到了同样的错误消息 - 在构建容器时,一些git操作开始失败,例如
# git remote show origin
fatal: protocol error: bad line length character: Inva
运行ssh给了我一个我可以搜索的错误:
# ssh git@bitbucket.org
Invalid clock_id for clock_gettime: 7
这导致我https://github.com/wolfcw/libfaketime/issues/63,我意识到我忘记了我在父Dockerfile中有LD_PRELOAD=/usr/local/lib/faketime/libfaketime.so.1
。评论说明修正了错误。
答案 15 :(得分:1)
我偶尔会遇到这个错误,但是当它发生时,这意味着我的分支不是最新的所以我必须做git pull origin <current_branch>
答案 16 :(得分:1)
以下内容可以帮助某人: 当我尝试克隆我在AWS EC2实例上的项目时,我收到以下错误:
Cloning into 'AWSbareRepo'...
fatal: protocol error: bad line length character: Plea
这是因为尝试以root身份而不是EC2-USER进行ssh。 如果你实际上ssh没有做一个git克隆...你会看到错误消息带来的&#34;请用ec2-user&#34; 一旦我作为ec2用户进行git克隆就很好了。
答案 17 :(得分:1)
如果使用腻子。然后确保运行Pageant,并将您的私钥加载到Pageant中(鼠标右键单击任务栏上的Pageant图标,然后在弹出的菜单上单击“查看密钥”)。
否则,当您在cmd.exe中执行操作时:
git clone ssh://name@host:/path/to/git/repo.git
您收到此消息“致命:协议错误:错误的行长字符:”
答案 18 :(得分:1)
我和Christer Fernstrom有同样的问题。在我的情况下,这是我在.bashrc中添加的一条消息,提醒我在几天内没有完成备份时做备份。
答案 19 :(得分:1)
Git没有提示输入密码,并且因类似的隐秘消息而失败&#34;致命:协议错误:线路长度错误:用户&#34; 如果您还没有设置私钥身份验证。
https://www.digitalocean.com/community/tutorials/how-to-configure-ssh-key-based-authentication-on-a-linux-server说明如何在服务器上指定公钥。基本上将公钥添加到〜/ .ssh / authorized_keys或〜/ .ssh / authorized_keys2
我不得不在如何在Windows机器上为Git Bash提供私钥方面有所作为。 Dan McClain在https://serverfault.com/questions/194567/how-do-i-tell-git-for-windows-where-to-find-my-private-rsa-key/382801#382801中的回答描述了这一点。他的回答是一个补充,在我的例子中,私钥文件应该被命名为id_rsa.pub
答案 20 :(得分:1)
对于我,使用私钥(使用puttygen转换)将相同的主机详细信息添加到Putty中。之后的任何git bash命令都没有问题。
答案 21 :(得分:0)
TL; DR:在Windows上,不要不要在远程URL中省略username@
。
在Linux和具有默认ssh的Windows上,您可以从远程URL中省略用户名,例如:
git clone server-name:/srv/git/repo-name
因为ssh的默认行为是仅使用您当前登录时使用的任何用户名。如果您使用的是Windows,并且已将git设置为使用plink.exe
,以便可以使用pageant
中加载的密钥,则此方法将不起作用,因为plink
没有此功能相同的自动用户名行为,导致出现那些神秘的错误消息,因为它将提示输入用户名:
$ plink server-name
login as: _
对:
$ plink username@server-name
...logs you in...
如果您已经以某种方式克隆了存储库,则可以通过将.git/config
添加到远程URL来修复username@
中的远程对象。
答案 22 :(得分:0)
就我而言,基本上我需要重新启动Windows。
答案 23 :(得分:0)
当我进行git pull时,我遇到了同样的问题
git pull致命:协议错误:线路长度错误字符: 我将远程URL HTTP更改为SSH,并且对我有用。 git远程设置URL来源从“ HTTP ”到“ SSH ”
答案 24 :(得分:0)
就我而言,问题是由修改后的 /bin/ssh
引起的。
我和其他人在一台服务器上工作,默认的 /bin/ssh
被修改了,
它在启动时输出意外日志。
我将 /bin/ssh
恢复到正确的可执行文件并解决了它。
答案 25 :(得分:0)
好吧,我有同样的问题(Windows 7)。尝试通过密码获取回购。 我使用Git Bash + Plink(环境变量GIT_SSH)+ Pageant。 删除GIT_SSH(临时)对我有帮助。我不知道为什么我不能同时使用登录和RSA登录...
答案 26 :(得分:0)
在设置/版本控制/ git下将ssh可执行程序从内置的更改为nativ可以解决问题。
答案 27 :(得分:0)
这里的答案很晚,但希望它会对某人有所帮助。如果它的协议错误,它必须与您的本地git无法与远程git通信。如果你通过ssh克隆了repo会发生这种情况,之后的一段时间,你丢失了repo的密钥,或者你的ssh代理不再能找到这些密钥了。
解决方案
生成一个新密钥并将其添加到您的git repo或配置您的ssh代理以加载密钥,如果您仍然拥有密钥和&amp;不与别人在一起;)
另一个快速解决方法是转到.git
目录,然后将config
文件的[remote "origin"] url
从git
修改为http
所以不需要推送ssh密钥,它将恢复为询问您的用户名和密码。
[remote "origin"]
url = git@gitlab.*****.com:****/****.git
fetch = +refs/heads/*:refs/remotes/origin/*
更改为
[remote "origin"]
url = http://gitlab.*****.com/****/****.git
fetch = +refs/heads/*:refs/remotes/origin/*
答案 28 :(得分:0)
你总是可以通过http链接到你的git项目。您可以使用它而不是ssh链接。这只是你的选择
答案 29 :(得分:0)
它可能是您机器上的安全访问,您是否正在运行Pageant(这是一个腻子代理)?
答案 30 :(得分:0)
我们也碰到了这个。
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
我不知道有关错误的详细信息,但在我们的案例中,触发它的是服务器上的磁盘已满。
答案 31 :(得分:0)
错误转化为: 致命:协议错误:行长字符错误:fata
将git-upload-pack的位置添加到系统路径后。
问题似乎是在存储库名称周围添加了一个撇号:使用像Process Monitor(来自sys internals)这样的工具,由git客户端添加。这似乎是一个特定于git的Windows问题。
我在服务器的提示符中尝试了相同的命令行:完整错误是“致命的:不是给定的存储库(或任何父目录):。git”
总之,对我而言,这似乎是一个软件错误。请注意,我不是git专家,这是我第一次使用git,我来自subversion和perforce。
答案 32 :(得分:-1)
检查服务器上是否允许Shell访问。