Becasuse of GitHub I am not that used to thinking of
git as a peer to peer decentralised version control system - despite the fact I know this theoretically. An upshot of this property that any folder that you have access to can act as a remote.
This came in handy today, rigging up a way to deploy code to a server that has very limited connectivity to the outside world.
First I copied my local copy over to the server.
Then on my workstation I added the folder as a remote:
git remote add prod \\analytics\blah\project_name
Then I can fetch that remote to get the branch metadata:
git fetch prod
after which I can push to it
git push prod
Well sort of. Initally I got this error:
git push prod Enumerating objects: 18, done. Counting objects: 100% (18/18), done. Delta compression using up to 8 threads Compressing objects: 100% (10/10), done. Writing objects: 100% (11/11), 1.37 KiB | 467.00 KiB/s, done. Total 11 (delta 6), reused 0 (delta 0), pack-reused 0 remote: Checking connectivity: 11, done. remote: error: refusing to update checked out branch: refs/heads/main remote: error: By default, updating the current branch in a non-bare repository remote: is denied, because it will make the index and work tree inconsistent remote: with what you pushed, and will require 'git reset --hard' to match remote: the work tree to HEAD. remote: remote: You can set the 'receive.denyCurrentBranch' configuration variable remote: to 'ignore' or 'warn' in the remote repository to allow pushing into remote: its current branch; however, this is not recommended unless you remote: arranged to update its work tree to match what you pushed in some remote: other way. remote: remote: To squelch this message and still keep the default behaviour, set remote: 'receive.denyCurrentBranch' configuration variable to 'refuse'. To \\analytics\blah\project_name ! [remote rejected] main -> main (branch is currently checked out) error: failed to push some refs to '\\analytics\blah\project_name
Git refused to accept my commits. The issue it is warning me about is that if I did push commits onto the main branch, the HEAD pointer in the copy on the server is not updated. So it would need to be updated by running
git reset in the server’s copy.
This can be fixed by running this command on my local machine:
git config --global receive.denyCurrentBranch "updateInstead"
So now when I try to push commits onto the current branch in the server’s copy it will automatically update the HEAD, provided there is no other uncommited changes hanging out in the working tree. RAD.