可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I am trying to get GitLab working on my server (running CentOS 6.5). I followed the gitlab-receipe to the line, but I just can't get it working. I am able to access the web interface, create new projects but pushing to the master branch returns the following error :
fatal: protocol error: bad line length character: This
I have done checks on the production environment, here are the results :
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
For the init script error, the receipt says
Do not mind about that error if you are sure that you have downloaded
the up-to-date
so as I have downloaded the latest one, I can't really do much about it.
I've been banging my head for the past week, and can not figure out why this error is occurring, any help would appreciated!!
回答1:
If anyone else has this problem, the solution is to change the login shell of the user 'git' (or whatever your user is called) to /bin/bash
. This can be done via the command : usermod -s /bin/bash git
(Link). The reason for changing the login shell is because the default shell for the git user is /sbin/nologin
(or similar, depending on environment), which prevents the git application from logging in as the git user on the git server.
回答2:
Just for other users reference:
fatal: protocol error: bad line length character: no s
can be a truncated answer for "No such project".
As in my case, this kind of error can be fixed by adding user (even yourself) to the project in gitlab:
https://gitlab.com/username/your_project/project_members
also, ensure your public key is set in your user Profile settings > SSH Key or in Project > Settings > Deploy Keys
https://gitlab.com/profile/keys
回答3:
Another thing to check is that your .bashrc does not print extra stuff.
For example 'echo "hello"' in .bashrc creates the error:
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
Note how saying hello caused one hell of a problem.
Removing the 'echo "hello"' from my .bashrc allows git to work as expected again. You may need to ">& /dev/null" to remove output if your .bashrc does more complicated things.
回答4:
The solution to my issue with this was that I'd forgotten to add in a deploy key for the project (for the user I was trying to deploy as).
Adding a deploy key in https://gitlab/group/project/deploy_keys sorted me out.
回答5:
Another possibility is that you misspelled the repository name.
I've done it twice in the last two days. I added a remote and misspelled it and I misspelled the name when creating the project on GitLab.
In both cases when I tried to push to remote I got
fatal: protocol error: bad line length character: No s
So check that spelling!
Also, if you create the project under a different name (like a group) make sure that's the remote you add.
回答6:
You can get the actual error message by doing:
ssh git@yourgitlabserver.com "git-upload-pack yournamespace/yourreponame.git"
According to this git documentation git protocol expects at the beginning of each line its size and then the content. Looks like GitLab doesn't do that and sends the error message directly.
回答7:
I experienced this error message today ("No s"), and it actually had to do with me having no rights to push to the targeted repository. Even though the error message is very weird, this might help people continue to work.
We use Gitlab.
回答8:
sudo gitlab-ctl reconfigure
and then
sudo gitlab-ctl restart
should do the trick
回答9:
In my case (private key over ~/.ssh/config) I had to leave out the ssh part in:
git clone ssh://git@hostname:username/repository.git
It worked with:
git clone git@hostname:username/repository.git
Error message was:
fatal: protocol error: bad line length character: No s
回答10:
In my case, my username was changed and this repository's git config was not updated to match the new name.
Check your git remotes to make sure they are pointing to correct place:
git remote -v
Update the config by editing the config manually:
vim .git/config
or through commands
git remote set-url origin https://github.com/USERNAME/OTHERREPOSITORY.git
回答11:
Adding my experience to this already long list of possible solutions.
In my case I had the access to the repo I cloned, but no access to some other internal repos the package.json
was referring to as dependencies or devDependencies.
So the solution was getting access to these repos as well.
回答12:
I had this same issue and turned out that I was working on a git branch. All I needed to do was push to the master.
$ git push <remote> <local branch name>:<remote branch to push into>
回答13:
change the shell of git
usermod -s /usr/bin/git-shell git
回答14:
Just adding a possible solution to others in my situation.
In my case I was trying to push a tag.
git push heroku MYTAG:master
It wasn't until I dereferenced the tag that it worked
git push heroku MYTAG^{}:master
You can read more about it here:
What does ^{} mean in git?
<rev>^{}, e.g. v0.99.8^{}
A suffix ^ followed by an empty brace pair means the object could be a tag, and dereference the tag recursively until a non-tag object is found.
回答15:
The solution for me was to unset the GIT_SSH env variable which was pointing to putty (plink.exe)
回答16:
Had the same issue, in my case the origin repo had been moved, changing .git/config solved my problem.
回答17:
When I wanted to push my commits, I got this error:
fatal: protocol error: bad line length character: No s
I solved this just by a ssh connection check:
ssh Git@hostIp
回答18:
My error was: fatal: protocol error: bad line length character: No s
This was caused because I forgot to specify the SCM-tag in the pom.xml of my Maven-project, so it used the SCM-information from the parent project instead.
I also had to add our Jenkins user to the project in GitLab.
回答19:
In my case that error was fixed by changing remote git-user shell to git-shell
using chsh
:
chsh -s $(command -v git-shell) git
Official git-shell
documentation. For security reasons it is highly recommended to use this shell for git-user on remote repository server.