Git推送结果致命:协议错误:坏行长度字符:这个

我试图让我的服务器上运行GitLab(运行CentOS 6.5)。 我跟着gitlab-receipe的线,但我不能得到它的工作。 我能够访问Web界面,创build新的项目,但推到主分支返回以下错误:

fatal: protocol error: bad line length character: This 

我已经对生产环境进行了检查,结果如下:

 Checking Environment ... Git configured for git user? ... yes Checking Environment ... Finished Checking GitLab Shell ... GitLab Shell version >= 1.7.9 ? ... OK (1.8.0) Repo base directory exists? ... yes Repo base directory is a symlink? ... no Repo base owned by git:git? ... yes Repo base access is drwxrws---? ... yes update hook up-to-date? ... yes update hooks in repos are links: ... ASC / Wiki ... repository is empty Running /home/git/gitlab-shell/bin/check Check GitLab API access: OK Check directories and files: /home/git/repositories: OK /home/git/.ssh/authorized_keys: OK Test redis-cli executable: redis-cli 2.4.10 Send ping to redis server: PONG gitlab-shell self-check successful Checking GitLab Shell ... Finished Checking Sidekiq ... Running? ... yes Number of Sidekiq processes ... 1 Checking Sidekiq ... Finished Checking LDAP ... LDAP is disabled in config/gitlab.yml Checking LDAP ... Finished Checking GitLab ... Database config exists? ... yes Database is SQLite ... no All migrations up? ... yes GitLab config exists? ... yes GitLab config outdated? ... no Log directory writable? ... yes Tmp directory writable? ... yes Init script exists? ... yes Init script up-to-date? ... no Try fixing it: Redownload the init script For more information see: doc/install/installation.md in section "Install Init Script" Please fix the error above and rerun the checks. projects have namespace: ... ASC / Wiki ... yes Projects have satellites? ... ASC / Wiki ... can't create, repository is empty Redis version >= 2.0.0? ... yes Your git bin path is "/usr/bin/git" Git version >= 1.7.10 ? ... yes (1.8.3) Checking GitLab ... Finished 

对于init脚本错误,收据说

如果您确定已经下载了最新版本,请不要介意这个错误

所以我下载了最新的一个,我真的不能做太多的事情。

过去一周,我一直在敲我的头,不知道为什么这个错误发生,任何帮助将不胜感激!

如果有其他人有这个问题,解决scheme是更改用户'git'(或任何你的用户被称为)的loginshell到/bin/bash 。 这可以通过命令完成: usermod -s /bin/bash git ( Link )。 更改loginshell的原因是因为git用户的默认shell是/sbin/nologin (或者类似,取决于环境),这会阻止git应用程序作为git服务器上的git用户login。

仅供其他用户参考:

 fatal: protocol error: bad line length character: no s can be a truncated answer for "No such project". 

在我的情况下,这种错误可以通过添加用户(甚至你自己)到gitlab中的项目来解决:

https://gitlab.com/username/your_project/project_members

另外,请确保您的公钥已在您的用户Profile settings > SSH Key or in Project > Settings > Deploy Keys

https://gitlab.com/profile/keys

另一件要检查的是你的.bashrc不打印额外的东西。 例如,在.bashrc中使用echo“hello”创build错误:

 kruus@borg:~/malt$ ssh snake01 Last login: Tue Oct 21 10:44:31 2014 from 138.15.166.103 hello ... kruus@snake01:/net/snake01/usr/hydra/kruus/malt$ git pull fatal: protocol error: bad line length character: hell 

注意怎么说,你好引起了一个问题。

从我的.bashrc中删除'echo“hello”'可以让git按预期工作。 如果您的.bashrc执行更复杂的事情,您可能需要“>&/ dev / null”来移除输出。

我的问题的解决scheme是,我忘了添加项目的部署密钥(对于我试图部署的用户)。

在https:// gitlab / group / project / deploy_keys中添加一个部署密钥将我整理出来。

另一种可能性是您拼错了存储库名称。

我在过去的两天里做了两次。 我添加了一个远程文件,拼错了它,并且在GitLab上创build项目时拼错了名字。

在这两种情况下,当我试图推远程我得到了

 fatal: protocol error: bad line length character: No s 

所以检查拼写!

此外,如果您使用不同的名称创build项目(如组),请确保这是您添加的远程。

你可以通过下面的方法得到实际的错误信息

ssh git@yourgitlabserver.com“git-upload-pack yournamespace / yourreponame.git”

根据这个git文档, git协议期望在每行的开始处它的大小,然后是内容。 看起来像GitLab不这样做,直接发送错误消息。

我今天遇到了这个错误消息(“No s”),实际上我没有权利推送到目标存储库。 即使错误信息非常奇怪,这可能会帮助人们继续工作。

我们使用Gitlab。

 sudo gitlab-ctl reconfigure 

接着

 sudo gitlab-ctl restart 

应该做的伎俩

在我的情况下(私钥over〜/ .ssh / config)我不得不在ssh部分:

 git clone ssh://git@hostname:username/repository.git 

它与:

 git clone git@hostname:username/repository.git 

错误消息是:

致命的:协议错误:坏行长度字符:没有

在我的情况下,我的用户名已更改,此存储库的gitconfiguration未更新以匹配新的名称。

检查你的git遥控器,确保它们指向正确的地方:

git remote -v

手动编辑configuration更新configuration:

vim .git/config

或通过命令

git remote set-url origin https://github.com/USERNAME/OTHERREPOSITORY.git

将我的经验添加到这个已经很长的可能解决scheme列表中

在我的情况下,我有访问我克隆的回购,但没有访问一些其他的内部回购package.json被称为依赖或devDependencies。 所以解决scheme也获得了这些回购。

我有同样的问题,原来我正在一个git分支上工作。 我所需要做的就是推给主人。

 $ git push <remote> <local branch name>:<remote branch to push into> 

我的错误是: fatal: protocol error: bad line length character: No s

这是因为我忘记在我的Maven项目的pom.xml中指定SCM标签,所以它使用了来自父项目的SCM信息。 我还必须将我们的Jenkins用户添加到GitLab中的项目中。

我希望这可以帮助别人:)

改变git的shell

 usermod -s /usr/bin/git-shell git 

只是在我的情况下添加一个可能的解决scheme。 在我的情况下,我试图推一个标签。

 git push heroku MYTAG:master 

直到我取消了标签的工作

 git push heroku MYTAG^{}:master 

你可以在这里阅读更多关于它的信息: ^ {}在git中意味着什么?

<rev>^{}, eg v0.99.8^{}

后缀^后跟一个空括号对意味着该对象可能是一个标签,并recursion引用标签,直到find一个非标签对象。

当我想推我的提交,我得到了这个错误:致命的:协议错误:坏行长度字符:没有

我只是通过ssh连接检查解决了这个问题:ssh git @ hostIp

我的解决scheme是取消设置指向腻子的GIT_SSH envvariables(plink.exe)

有同样的问题,在我的情况下,原始回购已被移动,改变.git / config解决了我的问题。