How to push to a non-bare git repository
1 Just once
On the remote machine
# create a new non-bare git repository
git init repo
# create and checkout a temporary branch
cd repo
git checkout -b tmp
On the local machine
# push to the new repository on the remote machine
git push --set-upstream remote_machine:repo master
On the remote machine
# checkout master
git checkout master
# tmp branch doesn't exist anymore
git branch -a
2 Allow git push to update the current remote branch
On the remote machine
# create a new non-bare git repository
git init repo
# configure receive.denyCurrentBranch to updateInstead
cd repo
git config --local receive.denyCurrentBranch updateInstead
On the local machine
# push to the new repository on the remote machine
git push --set-upstream remote_machine:repo master