Использование обновления подмодуля git --init для перехвата сообщений - PullRequest
7 голосов
/ 29 сентября 2011

У меня есть простой хук на / hooks / post-update в пустом репозитории:

#!/bin/sh
git-update-server-info

GIT_WORK_TREE=/home/user/apps/application-site/dev git checkout -f develop
GIT_WORK_TREE=/home/user/apps/application-site/dev git submodule update --init

GIT_WORK_TREE=/home/user/apps/application-site/master git checkout -f master
GIT_WORK_TREE=/home/user/apps/application-site/master git submodule update --init

В репозитории есть несколько подмодулей, которые, как я ожидаю, передаются на рабочий сервер и извлекают две веткив двух каталогах, так что я могу позже иметь dev.myapp.com для ветки разработки и www.myapp.com для главной ветки, и все это обновление также подмодули на ветках.

Checkout работаеткак и ожидалось, но не обновление подмодуля --init,: '(

Удаленный вывод вызывает эти ошибки.

remote: Switched to branch 'develop'
remote: You need to run this command from the toplevel of the working tree.
remote: Switched to branch 'master'
remote: You need to run this command from the toplevel of the working tree.

Я не совсем уверен, что делать.

Ответы [ 2 ]

8 голосов
/ 30 сентября 2011

Ответ заключается в том, чтобы делать именно то, что говорит вам git:

remote: You need to run this command from the toplevel of the working tree.

Так и сделай. Вот образец post-update крючка:

#!/bin/sh

export GIT_DIR=$(pwd)

cd /home/lars/projects/stackoverflow/gitstuff/worktree

git checkout -f master
git submodule init
git submodule update

Это предполагает, что:

  • core.bare является false
  • receive.denyCurrentBranch - это ignore. Вам это нужно, потому что в противном случае вы получите сообщение об ошибке при загрузке в хранилище с core.bare, установленным в false.

... и, похоже, работает в моем ограниченном тестировании.

2 голосов
/ 29 сентября 2011

Ваша первая переменная GIT_WORK_TREE (строка 4) подозрительна, учитывая, что в следующих строках вы ссылаетесь на переменную $WORK_TREE (которая не определена в этом сценарии).


Обратите внимание, что начиная с git1.8.4 (июль 2013 г.), вам больше не придется (для git submodule команд) возвращаться в корневой каталог.

См. commit 091a6eb0feed820a43663ca63dc2bc0bb247bbae:

подмодуль: отбросить требование верхнего уровня

Используйте новую опцию rev-parse --prefix, чтобы обработать все пути, заданные команде submodule, отбросив требование, что этозапускается с верхнего уровня репозитория.

Поскольку интерпретация относительного URL-адреса субмодуля зависит от того, настроен ли «remote.origin.url», явно блокируйте относительные URL-адреса в «git submodule add», если не вверхний уровень рабочего дерева.

Подписано: Джон Кепинг

Зависит от commit 12b9d32790b40bf3ea49134095619700191abf1f

Это заставляет git rev-parse вести себякак если бы он был вызван из указанного подкаталога репозитория, с той разницей, что любые пути к файлам, которые он печатает, имеют префикс полного пути из верхней части рабочего дерева .

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

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