2013-04-18 2 views
11

. Справочная информация: Разработка приложения для Facebook с использованием PHP Laravel framework & MySQL для базы данных.Хотите настроить крючок, который копирует файлы, скопированные в определенную папку.

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

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

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

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

Спасибо.

+1

Вы уже выбрали правильный ответ.Лучше всего оставить git делать чек, уважая атрибуты .gitignore и другие атрибуты git, а не rsynch, которые копируют/синхронизируют все. – VonC

ответ

3

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

+0

Это отличный совет, и я внедрил его в свой рабочий процесс. Огромное спасибо. – Kopty

3

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

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

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

+0

Это именно то, что я искал. Спасибо! – Kopty

+0

Вы также можете увидеть мой манифест манифеста [gitdeploy] (https://github.com/hauleth/puppet-gitdeploy). Он все еще находится в раннем развитии, но, как я уже тестировал, он работает :) – Hauleth

+0

Извините, но что вы подразумеваете под флагом + x? Кроме того, есть ли причина, по которой работает мой пост-фиксация, но не мой пост-прием? Благодаря! – andli

8

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

  • поддерживать рабочее дерево (мерзавец касса -f мастера)
  • копировать файлы, которые вы хотите от что работа

Это было бы:

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

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

Это прекрасно. Большое вам спасибо за подробный ответ. – Kopty

+0

Можем ли мы использовать ключ sha в качестве нового имени подкаталога? –

+0

@ dipievil Я не уверен, как ключ шайки играет какую-либо роль в этом вопросе или этом ответе. – VonC