Control Git with PHP
Git is getting popular day by day and there are many web front-ends for git available on the internet. In this article, i will give you an alternative option to work with git directly from PHP, i think it can be handy in some cases.
To start working with it, we will need to find out apache web user on the system. Normally, it’s www-data on linux and _www on Mac then we need to switch to that user using this command
su www-data; # or _www</pre>
then we create .ssh directory in www-data user home to generate & store ssh keys
# make new .ssh home for www user mdkir /var/www/.ssh; # change permission of .ssh directory chmod -Rf 777 /var/www/.ssh; # generate new key ssh-keygen -t rsa;
you will also need to allow www-data user read/write permission, i have an article for it here, but for short, you can use these command
# change group ownershipng to www-data user, user _www for MacOSX sudo chown -R :www-data [path_to_your_source_code_directory] sudo chmod -R g+w [path_to_your_source_code_directory]
As a git user, you know that git requires your ssh public key to be added to git so you can pull/push code. in this case, we need to add www-data user ssh key to git repository. please do it like you always do. After having www-data user ssh key added, you can execute following command to do initial git pull to accept git server.
# add /var/www/.ssh/id_rsa.pub to your git deploy key then execute these line cd GIT_REPO_FOLDER; git pull origin; # it will ask you to accept, choose yes. exit; # return to your user
finally, create php script like this (note : this is just an example for magento devsite update)
deploygit.php
<?php echo "\n1.switch branch\n"; echo(exec('git checkout devsite;')); echo "\n\n2.update branch\n"; echo(shell_exec('git pull origin devsite 2>&1')); echo "\n\n3.clean cache\n"; echo(exec('rm -rfv var/cache/*;')); echo("\n======="); die("\ndone!"); ?>
place it at root of your website source code, execute [you_web_site_base_url]/deploygit.php to run script