2009-10-13 1 views
2

В настоящее время я сталкиваюсь с некоторой дилеммой в том, что мне нужен сценарий для запуска всякий раз, когда удаленный репозиторий обновляется (т.е. , когда кто-то запускает git push), который создает пакеты из файлов в репозитории. Эти пакеты затем помещаются в каталог на сервере git, который подвергается клиентам через HTTP для будущего использования.Git: крюк после обновления, который запускает скрипт, который нуждается в доступе ко всем файлам в репозитории

Проблема заключается в том, что я не уверен, как получить доступ к файлам в репозитории в объявлении после обновления.

Если кто-то может дать некоторое представление, он был бы очень признателен.

ответ

3

Прежде всего, вы можете использовать пост-приемный крюк вместо пост-обновления. Согласно справочной странице githooks(5), post-receive заменяет пост-обновление.

Тем не менее, ваш скрипт крюк выполнен в подкаталоге .git/крючками, так что если вы делаете простой

cd .. 

ваш скрипт в рабочем дереве репозитория Git. Например, вот маленький скрипт, который гарантирует, что рабочее дерево удаленного хранилища мерзавца обновляется всякий раз, когда вы нажимаете в хранилище:

#!/bin/sh 
export GIT_DIR= 
cd .. 
echo "Resetting working tree..." 
git reset --hard 
echo "Finished resetting working tree." 

Заметим, что вам нужно не-установить переменную окружения GIT_DIR; он автоматически устанавливается, и до тех пор, пока его набор всех команд git будет запущен в этом каталоге - независимо от того, где вы cd'ed.

+0

Или используйте GIT_WORK_TREE ЭКОЛОГИЧЕСКОГО переменный или --work дерева варианта мерзавца ... –

1

Если ваш удаленный репозиторий является открытым разделенным репо, тогда нет копии файлов. вы можете изменить это, и тогда вам просто нужно запустить автозаказ.

если ваши упаковочные HTE файлы, лучше иметь репозиторий в отдельном каталоге слишком

я использую следующие для точной цели вы назвали

здесь является блог, который показал мне, как установить его http://toroid.org/ams/git-website-howto

здесь мои abbrieviated примечания ниже

сделать каталог вне репо и поставить рабочее дерево там, а затем сделать его больше не голое s репо о наличии копии файлов, а затем запустить перед запуском вашей упаковки сценария

  # create the repo with files that live in a seperate folder 
      cd /share/proj/all/$1/repo 
      git --bare init --shared 
      git config core.worktree ../actual 
      git config core.bare false 
      git config receive.denycurrentbranch ignore 
      # add a hook to checkout the repo into the files directory automatically on push 
      echo "#!/bin/sh" > hooks/post-receive 
      echo "git checkout -f" >> hooks/post-receive 
      chmod +x hooks/post-receive 
Смежные вопросы