Basically, I just want to use git as sort of a versioned one-way FTP.
I have a local git repo in local/
. I want to push it to server:remote/
, and I want that afterwards all files are checked out in remote
on the server (identically to what it looks locally, assuming I git-add
ed everything)
In other words, I want to reproduce this behaviour from Mercurial:
[hooks]
changegroup.update = hg update && echo updated successfully.
I found tons of tutorials that do this with two separate directories on the server side, but I would prefer to use a single one. Is that possible? When I try it, I get the message, below which I don't really understand.
What would be the best practice to do this? (If necessary, you can assume I never change anything on the server, so --force
ing something would not be a problem.)
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'.
git
is the good tool for your need. By default (and this is the content of your alert message) it will refuse to push to a non bare repository where something is already checked out at the same branch because the act of pushing it like that may mean you loose things (you said: assume nothing was changed on the server, but git can not know that). If you want to stick to this model, like the message says, change your configuration and use ignore. You may have a simpler life anyway usingrsync
.git
subfolder. You may or may not want to restrict that, as by default it would be available from your FTP server. Besides the disk impact.