背景:使用PHP Laravel框架开发Facebook应用程序& MySQL for database。
我已经在我们的开发服务器上设置了Gitlab,并在其上创建了一个存储库,其中已经添加了团队并且正在提交&推送代码。
我想要做的是,当我将代码推送到GitLab上的特定分支(例如Master)时,我希望它可以在/ var / www / productname中使用,以便我可以在Facebook画布中测试它同样(某些事情发生在那里,无法在本地机器上测试)。
但是,我不希望钩子在每次主控上发生推送时复制所有文件,只需要修改文件。
任何人都可以帮忙解决这个问题吗?
谢谢。
答案 0 :(得分:11)
您需要添加一个post-receive
挂钩的裸仓库(由GitLab管理):
那将是:
cd ~git/repositories/yourRepo.git/hooks
touch post-receive
chmod +x post-receive
如果有人推动分支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
对于该挂钩完成的结账,请参阅“GIT post-receive checkout without root folder”,即:
请务必指定--git-dir
和--git-work-tree
:
git --git-dir=/path/to/project_root.git --work-tree=/path/to/your/workingtree checkout -f
同样,/path/to/your/workingtree
可以是:
答案 1 :(得分:4)
使用rsync而不是cp进行此操作。它会自动进行差异检查。这样你的post-commit钩子就不会变得不必要了。
答案 2 :(得分:3)
This post很好地描述了它。您只需创建包含以下内容的post-receive
挂钩:
#!/bin/sh
GIT_WORK_TREE=/path/to/webroot/of/mywebsite git checkout -f
添加+x
标志,它会在指定文件夹中检出您的仓库。