Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
Git push to prod
# Use git to push to deploy (aka git push to prod)
# Use 'git push remote master' to push to deploy
# This script only deploys on pushes to master.
# On your server to deploy, create a bare git directory
# (somewhere like /var/git/<gitProject>)
# Your depoly directory (like /var/www) should be somewhere other than your git repo.
# git --bare init
# Put this script into <gitProject>/hooks/post-receive on the deploy server
# Make sure this script has execute permissions (chmod +x post-receive)
# Then add this remote repo as a remote in git.
# git remote add deployServer ssh://<gitProject>
# Then use ssh to push to production.
# git push deployServer master
# You can create a group (like "git"), make it owner of this file
# Then add every user that needs to push to the that group.
# See for more background.
echo 'start repo to prod'
OWNER="OwnerOfTheProject example: www:www"
function push(){
git --work-tree=$PROJPATH --git-dir=$GITPATH checkout -f master
find $PROJPATH/* -type d -exec chmod 775 {} \;
find $PROJPATH/* -type f -exec chmod 664 {} \;
echo 'push complete'
#If executed from shell, push latest master commit regardless.
#This allows you to re-push by entering "./post-receive" from the command line.
if [ -t 0 ]; then
#Determine the branch, only push to prod on master.
while read oldrev newrev refname
branch=$(git rev-parse --symbolic --abbrev-ref $refname)
if [ "master" == "$branch" ]; then
echo 'Master branch. Pushing to prod'
echo 'Not on master. Not pushing to prod'
echo 'End repo to prod'

This comment has been minimized.

Copy link

@borgogelli borgogelli commented Nov 8, 2016

What is the purpose of this script ? Should I put the script on my private git server or on the hosting server (where I pull the code with the git client) ? What is not clear to me, it's your definition of production server.


This comment has been minimized.

Copy link
Owner Author

@zamicol zamicol commented Nov 10, 2016

Hi @borgogelli. I've updated the gist with a better description. Let me know if this answers your question.


This comment has been minimized.

Copy link

@MattRay-SD MattRay-SD commented Sep 28, 2017

Does this still work? I know now that the file is named ‘push-update’ instead of ‘push-receive’

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment