I\'m getting the warning
warning: You did not specify any refspecs to push, and the current remote
warning: has not configured any push refspecs. The default
The message you’re getting means that your remote repository is empty (which has nothing to do with being bare). When pushing into a remote repository for the first time you need to specify what to push:
git push origin master
This will push your current master branch to the remote repository. Subsequent invocations of git push
will pushing “matching” branches, i.e. if there’s a “master” branch in the remote repository your local “master” branch will be pushed to it.
How do I check that it is bare?
As mentioned in the answer below (upvoted) by jberryman, if you have access to the remote repo, you can run in it:
git rev-parse --is-bare-repository
It was introduced as early as commit 493c774, Git 1.5.3 (Sept. 2007) and commit 7ae3df8 by Matthias Lederhofer (matled).
When the repository is bare print "true", otherwise "false".
You could use (from git config):
git config --add push.default current
to specify what you want to push by default.
or:
git config --global push.default matching
if you have many repositories.
current: push the current branch to a branch of the same name.
Check also if the warning was not followed by an error message like in this SO question.
So your destination repo may be a bare one, but, as said in Sensible Git Refspecs:
When you do a
git pull
,fetch,
push
and some others you need to specify arefspec
for the current repository.
Arefspec
describes the mapping between the local reference and the remote one, so you can push (or pull etc) the master branch head and store it as your origin branch head. Basically it’s a way of mapping branches between repos.
See also "concept of bared shared repository in git".
Note: it is true than from Git1.6.3, :
"
git push
" into a branch that is currently checked out will be refused by default.
You can choose what should happen upon such a push by setting the configuration variablereceive.denyCurrentBranch
in the receiving repository.
But I do not think this is what you are seeing right now.
As mentioned in "all about "bare" repos -- what, why, and how to fix a non-bare push" (at the bottom)
To make it a "real" bare repo, just delete all the files except
.git
, thenmv .git/* .; rmdir .git
.
Finally, edit the file calledconfig
and changebare = false
tobare = true
.
So if your destination repo has a config
file with bare = true
, it is a bare repo.
try
$ git config --get core.bare
Open the config
file in the .get
directory and look for bare = true
.
It doesn't sound like that was your problem, but to actually answer the question you asked in the title: you can run...
$ git rev-parse --is-bare-repository
...to query if a repo is bare or not. Returns 'true' or 'false'.