I am trying to push to a git repository that is managed by gitosis on a server. When I push, I get this error:
william@utapau:~/lyre$ git push
Enter passphrase for key '/home/william/.ssh/id_dsa':
Counting objects: 9, done.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (5/5), 705 bytes, done.
Total 5 (delta 4), reused 0 (delta 0)
remote: error: refusing to update checked out branch: refs/heads/master
remote: error: By default, updating the current branch in a non-bare repository
remote: error: is denied, because it will make the index and work tree inconsistent
remote: error: with what you pushed, and will require 'git reset --hard' to match
remote: error: the work tree to HEAD.
remote: error:
remote: error: You can set 'receive.denyCurrentBranch' configuration variable to
remote: error: 'ignore' or 'warn' in the remote repository to allow pushing into
remote: error: its current branch; however, this is not recommended unless you
remote: error: arranged to update its work tree to match what you pushed in some
remote: error: other way.
remote: error:
remote: error: To squelch this message and still keep the default behaviour, set
remote: error: 'receive.denyCurrentBranch' configuration variable to 'refuse'.
To r:lyre
! [remote rejected] master -> master (branch is currently checked out)
error: failed to push some refs to 'r:lyre'
I found this question:
Git push error '[remote rejected] master -> master (branch is currently checked out)'
and tried the answer there, with no luck. The remote repository doesn't have a .git
folder because it was set up with gitosis. There should not be a work tree or checked out branch in there.
The repository folder structure looks like this:
william@sirius:/home/git/repositories/lyre.git$ ls -hal
total 40K
drwxr-xr-x 7 git users 4.0K May 24 12:58 .
drwxr-xr-x 5 git users 4.0K May 4 2011 ..
drwxr-xr-x 2 git users 4.0K May 4 2011 branches
-rw-rw-r-- 1 git users 66 May 24 12:58 config
-rw-r--r-- 1 git users 73 May 4 2011 description
-rw-r--r-- 1 git users 23 May 4 2011 HEAD
drwxr-xr-x 2 git users 4.0K May 4 2011 hooks
drwxr-xr-x 2 git users 4.0K May 4 2011 info
drwxr-xr-x 163 git users 4.0K Apr 26 15:26 objects
drwxr-xr-x 4 git users 4.0K May 4 2011 refs
william@sirius:/home/git/repositories/lyre.git$ cd branches/
william@sirius:/home/git/repositories/lyre.git/branches$ ls -hal
total 8.0K
drwxr-xr-x 2 git users 4.0K May 4 2011 .
drwxr-xr-x 7 git users 4.0K May 24 12:58 ..
How can I get out of this mess and push to the repository?
PEBCAK. Turns out I did not clone the repository I thought I cloned. I was attempting to push to a non-bare repository.
On the remote server, the gitosis repository is at /home/git/repositories/lyre.git/
and I also have a clone at /home/william/lyre/
.
On my local workstation I set up ~/.ssh/config
like so:
host r
user william
When I cloned the repository, I did it with git clone r:lyre
and inadvertently cloned the clone instead of the gitosis repo. When I attempted to push, I was indeed pushing to a non-bare repo.
I changed ~/.ssh/config
to this:
host r
user git
and all my problems went away. This was all a case of mistaken identity.