-
-
Save jswartwood/1861587 to your computer and use it in GitHub Desktop.
#!/bin/bash | |
# Replace this line with your real domain name | |
DOMAIN=mydomain.com | |
echo | |
echo "-= Transferring changes to $DOMAIN =-" | |
echo | |
# Clearing git env | |
unset GIT_DIR | |
unset GIT_WORK_TREE | |
cd ~/$DOMAIN | |
git pull | |
echo | |
echo "-= Done =-" | |
echo |
# Replace any brackets with real values | |
# Try to ssh in to DREAMHOST (ensure it no longer asks for a PW); you may want to restart Terminal | |
ssh [user]@[host] | |
cd ~ | |
mkdir [mydomain_com].git | |
cd [mydomain_com].git | |
git init --bare | |
vi hooks/post-receive | |
# Enter the code from the "post-receive" file (in this gist); save + quit | |
cd .. | |
git clone [mydomain_com].git [mydomain.com] | |
exit | |
# Add remote to git's list of remote repos | |
cd [some local git folder] | |
git remote add live ssh://[user]@[host]/~/[mydomain_com].git | |
# Push to production :) | |
git push live master |
# Replace any brackets with real values | |
# Before you start this, ensure that you have added shell (ssh) access for your hosted account (not just sftp/ftp). | |
# You may need to generate a new ssh key; if so, follow instructions to generate ssh key | |
ssh-keygen -t rsa | |
# Add to authorized keys on DREAMHOST | |
# For OSX: | |
cat ~/.ssh/id_rsa.pub | ssh [user]@[host] "mkdir ~/.ssh; cat >> ~/.ssh/authorized_keys" | |
# Else: | |
ssh-copy-id [user]@[host] |
Right... that was where I was leaving a placeholder for "production" vs "staging" tags; changed gist.
You may need to adjust perms on post-receive (via chmod). Does it have "x" if you ls -al
?
Yep. chmod 755 post-receive did the trick. I also had to add sudo to the git pull line. It didn't like the permissions either.
You may be able to change owner (chown) to avoid sudo, but if it works so be it.
Also, not to quibble over usage of chmod, but in case you aren't familiar w/ the other syntax... I find the chmod [scopes][+-][perms]
variant more "user-friendly" if you aren't a unix guy. Ex: chmod ug+xw post-receive
will add (+) execute (x) and write (w) privileges for the user (u) and (g) of the file.
The drawback is to do chmod 755 post-receive
, you would need at least two commands chmod a+rwx post-receive
(add all perms for all users) and chmod go-w post-receive
(remove write perm for groups and others) to ensure the end result of 755.
Thank god for you. I've been pulling my hair out over this for days. Worked like a charm with the chmod 775. No need for sudo on my end.
Great stuff man!!! Thank you very much for this!
THANK YOU! This is brilliant - I needed to chmod 755 post-receive to get it to work.
Thanks!! Any idea why it doesn't work with method of setting the work tree of the bare repo?
Not sure if this is still working, I have setup the identical configuration with my sites domain and I get the following error:
remote:
remote: -= Transferring changes to mydomain.com =-
remote:
remote: fatal: Not a git repository (or any parent up to mount point /home)
remote: Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
remote:
remote: -= Done =-
remote:
Also, had to run "git push live master" for some reason. Got errors if I didn't.