из командной строки хорошо, но крючок (мерзавец) - PullRequest
3 голосов
/ 10 ноября 2010

Я хочу автоматически обновлять мой репозиторий проекта Redmine после того, как кто-нибудь запустит удаленное репо.В настоящее время джин в Redmine работает и работает нормально.Но после автоматического обновления с помощью ловушки я получаю The entry or revision was not found in the repository. в redmine.

Чтобы настроить git в redime, я следовал redmine wiki , поэтому репозиторий был создан через git clone --bare

Чтобы обновить git-репозиторий Redmine, я использую cd /srv/www/redmine.domain.com/git_repositories/linode.git && git fetch && git reset --soft refs/remotes/origin/master

  • обновление вручную, если работает из командной строки под git, пользователь работает нормально

снимок экрана при выполнении вручную равен

remote: Counting objects: 5, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 2), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From domain.com:linode
  * [new branch]      master     -> origin/master
  • , то же самое не работает правильно при запуске ловушки post-receive (см. Ошибку выше).Работает под тем же пользователем (git).Первая строка крючка: #!/bin/sh

конфигурация: git (1.7.0.4) + gitolite (1.5.7) на Ubuntu

Я проверилсистемная переменная GIT_DIR byt команда SET remote: /srv/www/redmine.domain.com/git_repositories/linode.git[K remote: GIT_DIR = '.' [K

Я даже пытался установить git pathна крючке

export GIT_DIR=/srv/www/redmine.domain.com/git_repositories/linode.git
or unset GIT_DIR

но ничего не помогло.

Результат крючка

echo "Post receive-hook => updating Redmine repository"
#env -i git reset --hard
#unset $(git rev-parse --local-env-vars)
#unset GIT_DIR


cd /srv/www/redmine.domain.com/git_repositories/linode.git
pwd
git fetch
git reset --soft refs/remotes/origin/master

равен

Pushing to git@domain.com:linode
remote: Post receive-hook => updating Redmine repository[K
remote: From domain.com:linode[K
remote: /srv/www/redmine.domain.com/git_repositories/linode.git[K
remote:    4755447..13b8e3d  master     -> origin/master[K
To git@domain.com:linode
  4755447..13b8e3d  master -> master

Я пыталсянесколько подсказок из call-git-pull-from-a-git-post-update-hook и git-post-receive-hook-with-git-pull-failed-to-find-a-valid-git-directory но ничего не помогло

Обновление

если я попытаюсь

echo "Post receive-hook => updating Redmine repository"
export GIT_DIR=

cd /srv/www/domain.com/git_repositories/linode.git

echo "Resetting working tree..."
git reset --hard
echo "Finished resetting working tree."

git fetch
git reset --soft refs/remotes/origin/master

Я получаю это + хранилище redmine не трогается и доступно из redmine

Pushing to git@domain.com:linode
remote: Post receive-hook => updating Redmine repository[K
remote: Resetting working tree...[K
remote: fatal: Not a git repository: ''[K
remote: Finished resetting working tree.[K
remote: fatal: Not a git repository: ''[K
remote: fatal: Not a git repository: ''[K
To git@domain.com:linode
 c553a15..854d159  master -> master

Update2

Я обнаружил, что если я сделаю git fetch из хука, а затем git reset --soft refs/remotes/origin/master из командной строки, это не будет работать.Я получаю вышеуказанную ошибку в Redmine.Я делаю git fetch из командной строки, тогда все работает нормально.Консольные сообщения от команд ловушки и коммандной строки 'git fetch` выглядят одинаково для меня.

1 Ответ

0 голосов
/ 18 ноября 2010

Я точно знаю, что и почему, но после выполнения git fetch через хук (я использую gitolite) некоторые файлы (возможно, новые) имеют разрешения, которые redmine `не любит.трюк

...