Tutorial :pushing to a git repository does not work


I am just starting out with GIT (i'm coming from cvs) and would like to set up something akin to cvs/svn with Git. I performed the following steps:

cd o:/repository  git init    cd <working directory>  git clone o:/repository  

i now created a file called file.txt with some content doing a "git status" lists appropriate changes.

I then do

git add file.txt  git commit file.txt  

and both seem to work fine.

When i do git push, i get the following error:

No refs in common and none specified; doing nothing.  Perhaps you should specify a branch such as 'master'.  fatal: The remote end hung up unexpectedly  error: failed to push some refs to 'o:/repository'  

I tried doing a pull first, as well as specifying origin and master variations to the push command but none work.

Can someone please tell me what i am missing. I am running Windows 7 64 bit.

Ps. I also tried

git push origin master  

and i get the following:

Counting objects: 3, done.  Writing objects: 100% (3/3), 251 bytes, done.  Total 3 (delta 0), reused 0 (delta 0)  Unpacking objects: 100% (3/3), done.  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 O:/repository   ! [remote rejected] master -> master (branch is currently checked out)  error: failed to push some refs to 'O:/repository'  


This happened to us a few weeks ago. It means that you have a working directory checked out in your origin repository and you cannot push to overwrite.

at the origin you need to bare the repository. I don't know of a way to do it with one command. What I did (at the origin repository)

> mv repository repository.old  > git clone --bare repository.old repository  

I see that the origin in your case is the o:/repository. The origin, should not be a checked out working copy, so you can init a bare repository or copy as per above. To get the scenario you described to pass:

cd o:/repository  git init  --bare    cd <working directory>  git clone o:/repository    git push origin master  

this should work just fine for you:

good reading: http://www.gitready.com/advanced/2009/02/01/push-to-only-bare-repositories.html


For the first push you'll need something like

git push origin master  

See also the push.default option option.

In any case, if you're later going to run into a problem of pushing to a non-bare repository, so you'll need to read about that too.


If you still want to push to a checked out branch of a remote non-bare repo, it is now possible (Git 2.3.0, February 2015), provided there is no modified files in the target working tree.

In that remote repo, do:

git config receive.denyCurrentBranch=updateInstead  

It is more secure than config receive.denyCurrentBranch=ignore: it will allow the push only if you are not overriding modification in progress.

See commit 1404bcb by Johannes Schindelin (dscho):

receive-pack: add another option for receive.denyCurrentBranch

When synchronizing between working directories, it can be handy to update the current branch via 'push' rather than 'pull', e.g. when pushing a fix from inside a VM, or when pushing a fix made on a user's machine (where the developer is not at liberty to install an ssh daemon let alone know the user's password).

The common workaround â€" pushing into a temporary branch and then merging on the other machine â€" is no longer necessary with this patch.

The new option is:


Update the working tree accordingly, but refuse to do so if there are any uncommitted changes.


As the error message states, the branch you're trying to push to (master) is checked out in the origin repository. You could solve this by going to o:/repository and checking out a different branch.

Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Next Post »