git post-update script не работает - PullRequest
4 голосов
/ 10 февраля 2012

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

В .git/hooks/post-update У меня есть:

echo "a" >> /home/pi/log
git update-server-info
git stash
git merge testing >> /home/pi/log

Для автоматической проверки.Итак, я запускаю на клиенте:

git push testing HEAD:testing

Теперь мой /home/pi/log содержит:

a
Updating ae2f44b..04753a9
Fast-forward
 application/views/main/index.php |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

Но файл не изменился!

$ git merge testing
Already up-to-date.

Если яудалите скрипт, сделайте push и запустите git stash, git merge testing, он работает.

Обновление

Для тестирования я изменил число в файле с 17 на20. Я вижу правильную версию файла, если я запускаю

git show application/views/main/index.php

, но

vim application/views/main/index.php

Все еще содержит старое число.Но git утверждает, что файл обновлен:

$ git merge testing
Already up-to-date.

Ответы [ 3 ]

5 голосов
/ 10 февраля 2012

РЕДАКТИРОВАТЬ

Похоже, это ваша проблема :

 pre-receive
 update
 post-receive
 post-update

Эти крючки могут быть запущены либо вголое или не голое хранилище.В обоих случаях текущим рабочим каталогом будет каталог git.Таким образом, если это пустой репозиторий с именем "/src/git/test.git/", то это будет текущий рабочий каталог - если это не пустой репозиторий, а верхний уровень рабочего дерева - "/ home/ mark / test / "тогда текущим рабочим каталогом будет" /home/mark/test/.git/".

В обоих случаях установлена ​​следующая переменная окружения: GIT_DIR установлено в '. '

С рабочим деревом это неожиданно неловко, как описано в ответе Криса Джонсена, на который я ссылался ранее.Если задано только GIT_DIR, тогда применяется этот комментарий со страницы руководства пользователя git:

Примечание: Если указаны --git-dir или GIT_DIR, но не указаны ни один из --work-tree, GIT_WORK_TREE и core.worktreeтекущий рабочий каталог рассматривается как верхний каталог вашего рабочего дерева.

Другими словами, ваше рабочее дерево также будет текущим каталогом (каталог ".git"), который почти наверняка нечто вы хотите.

Вы можете попробовать установить GIT_WORK_TREE=.. или GIT_WORK_TREE="$GIT_DIR/.." внутри крючка


Но файл не изменился!

Скорее всего, так и было.Возможно, только конец строки изменился, или произошли изменения пробелов, которые игнорируются при просмотре различий, но они изменились.Git знает, потому что изменилась сумма SHA1 содержимого файла.

Используете ли вы окна на обоих концах?

Windows имеет тенденцию связываться с окончаниями строк.См. Core.autocrlf и связанные параметры:

2 голосов
/ 15 февраля 2012

Решение - использовать post-receive, как указал Алекс. Также вам нужно запустить unset GIT_DIR вверху вашего скрипта.

На сервере я создал вторую ветку и переключился на нее:

$ git branch
  master
* testing

Мой .git/hooks/post-receive теперь выглядит так:

unset GIT_DIR
cd ..
git merge master

На клиенте я запускаю git push.

1 голос
/ 10 февраля 2012

Вы пытались использовать вместо этого post-receive крючок?Возможно, что-то еще не закончено в post-update, и поэтому слияние не работает.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...