Подтвердить что ты не робот

Хотите настроить крючок, который копирует переданные файлы в определенную папку

Фон: Разработка приложения Facebook с использованием PHP Laravel framework и MySQL для базы данных.

Я установил Gitlab на наш сервер разработки и создал репозиторий на нем, где команда была добавлена ​​и совершает и нажимает код.

Что бы я хотел сделать, когда я нажимаю код на конкретную ветвь на GitLab (например, Master), я бы хотел, чтобы она была доступна в /var/www/productname, чтобы я мог протестировать ее в холсте Facebook также (некоторые вещи случаются там, которые не могут быть протестированы на вашей локальной машине).

Тем не менее, я не хочу, чтобы хост копировал все файлы за каждый раз, когда происходит нажатие на master, а только файлы, которые были изменены.

Может ли кто-нибудь помочь с таким крючком?

Спасибо.

4b9b3361

Ответ 1

Для этой операции используйте rsync, а не cp. Он автоматически проверяет diff. таким образом, ваш крюк после фиксации не становится излишне сложным.

Ответ 2

Вам нужно будет добавить к голой репо (управляемой GitLab) привязкой post-receive, которая:

  • поддерживать рабочее дерево (git checkout -f master)
  • скопируйте файлы, которые вы хотите от этого.

Это будет:

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 может быть:

  • только промежуточное рабочее дерево для вас, чтобы извлечь из него соответствующие файлы, которые вы хотите скопировать.
  • или путь к вашему приложению, если вы хотите, чтобы все файлы из мастера были обновлены в каталоге назначения вашего приложения wab.

Ответ 3

Этот пост в блоге Seb Duggan описывает это красиво. Вы просто создаете post-receive hook, которые содержат:

#!/bin/sh
GIT_WORK_TREE=/path/to/webroot/of/mywebsite git checkout -f

Добавьте флаг +x, и он проверит ваше репо в данной папке.