Search code examples
gitgitosis

I got a non-bare repository in gitosis somehow?


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?


Solution

  • 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.