Ответ 1
Для этой операции используйте rsync, а не cp. Он автоматически проверяет diff. таким образом, ваш крюк после фиксации не становится излишне сложным.
Фон: Разработка приложения Facebook с использованием PHP Laravel framework и MySQL для базы данных.
Я установил Gitlab на наш сервер разработки и создал репозиторий на нем, где команда была добавлена и совершает и нажимает код.
Что бы я хотел сделать, когда я нажимаю код на конкретную ветвь на GitLab (например, Master), я бы хотел, чтобы она была доступна в /var/www/productname, чтобы я мог протестировать ее в холсте Facebook также (некоторые вещи случаются там, которые не могут быть протестированы на вашей локальной машине).
Тем не менее, я не хочу, чтобы хост копировал все файлы за каждый раз, когда происходит нажатие на master, а только файлы, которые были изменены.
Может ли кто-нибудь помочь с таким крючком?
Спасибо.
Для этой операции используйте rsync, а не cp. Он автоматически проверяет diff. таким образом, ваш крюк после фиксации не становится излишне сложным.
Вам нужно будет добавить к голой репо (управляемой GitLab) привязкой post-receive
, которая:
Это будет:
cd ~git/repositories/yourRepo.git/hooks
touch post-receive
chmod +x post-receive
Вы можете убедиться, что hook будет активен только если кто-то нажимает на ветку 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 пост-приемная проверка без корневой папки", то есть:
убедитесь, что вы указали --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
может быть:
Этот пост в блоге Seb Duggan описывает это красиво. Вы просто создаете post-receive
hook, которые содержат:
#!/bin/sh
GIT_WORK_TREE=/path/to/webroot/of/mywebsite git checkout -f
Добавьте флаг +x
, и он проверит ваше репо в данной папке.