Reputation: 548
Background: Developing a Facebook app using PHP Laravel framework & MySQL for database.
I have setup Gitlab on our development server and created a repository on it where the team has been added and is committing & pushing code.
What I would like to do is, when I push code to a particular branch on GitLab (for example Master) I would like it to be available at /var/www/productname so that I can test it within the Facebook canvas as well (certain things happen there that can't be tested on your local machine).
However, I don't want the hook to copy all the files over every time a push happens on master, just the files that were modified.
Can anyone help out with such a hook?
Thank you.
Upvotes: 14
Views: 7944
Reputation: 66
Use rsync rather than cp for this operation. It does diff checking automatically. that way your post-commit hook doesn't become needlessly complicated.
Upvotes: 5
Reputation: 1326706
You would need to add to the bare repo (managed by GitLab) a post-receive
hook which would:
That would be:
cd ~git/repositories/yourRepo.git/hooks
touch post-receive
chmod +x post-receive
You can make sure that hook will only be active if someone pushes on branch master
:
#!/bin/bash
while read oldrev newrev refname
do
branch=$(git rev-parse --symbolic --abbrev-ref $refname)
if [ "master" == "$branch" ]; then
# Do something
fi
done
For the checkout done by that hook, see "GIT post-receive checkout without root folder", that is:
make sure you specify --git-dir
and --git-work-tree
:
git --git-dir=/path/to/project_root.git --work-tree=/path/to/your/workingtree checkout -f
Again, /path/to/your/workingtree
can be:
Upvotes: 14