Использование git для поддержки сайта - PullRequest
0 голосов
/ 20 марта 2012

До сегодняшнего дня я использовал git следующим образом:

  • мастер репо / путь / www на моем веб-сервере в качестве корня документа

  • клон на моем ПК

Я обычно делал большие изменения на ПК и отправлял на сервер.После этого мне пришлось «git reset HEAD» и «git checkout».на сервере.Иногда я делаю небольшие изменения на сервере и возвращаю их обратно на ПК.Это все работало нормально до сегодняшнего дня, когда, нажимая, git жаловался

remote: error: refusing to update checked out branch: refs/heads/master
etc.  

Почему после 6-12 месяцев нормальной работы этот сбой должен произойти сейчас?

Найдя http://toroid.org/ams/git-website-howto благодаря вопросу StackOverflow, я скопировал / path / www в /path/www.git и сделал это «голым» репо.Корень документа остается в / path / www.Я добавил скрипт .git / hooks / post-receive, содержащий «GIT_WORK_TREE = / path / www checkout -f».

После изменения конфигурации на ПК, чтобы он указывал на репозиторий www.git, теперь я могунажмите как прежде, и изменения будут загружены и обновлены в корне документа.У меня есть несколько вопросов по этому поводу:

  • , что подразумевает, что у рабочего дерева нет метаданных .git.Это действительно так?Я попытался удалить его каталог .git, но «git status» больше не работал.Установка GIT_DIR в /path/www.git не помогла, так как git сказал, что репо (голое в /path/www.git) на самом деле не было репо.

  • Если яобновите index.html и добавьте somefile.html на ПК и отправьте эти изменения; эти файлы обновляются / добавляются в корневой каталог сервера.Но если я использую «git status» в корне документа, это говорит о том, что index.html был изменен, а somefile.html является неотслеживаемым файлом.Я наивно ожидал, что "checkout -f" обновит рабочее дерево до того, что я вытолкнул с ПК.Могу ли я достичь этого?

1 Ответ

0 голосов
/ 20 марта 2012

Подсказка подразумевает, что у рабочего дерева нет метаданных .git. Это действительно так?

Да. У вас есть чистая настройка репо, и для того, чтобы фактически получить ваши файлы для вашего сайта, вы «временно» назначаете рабочий каталог для «голого репо» и проверяете его по нужному пути сайта. Это то, что делает GIT_WORK_TREE=/path/www checkout -f. .git, который присутствовал, был бы артефактом вашей предыдущей установки до того, как вы перешли к репо.

Но если я использую "git status" в корне документа, он говорит мне, что index.html был изменен, а somefile.html является неотслеживаемым файлом.

Опять же, это похоже на эффект присутствия .git из вашей предыдущей настройки. Удалить /var/www/.git

Я наивно ожидал, что "checkout -f" обновит рабочее дерево именно к тому, что я вытолкнул с ПК.

Ваши ожидания верны, и вот как это должно работать. Удалите .git, как указано выше.

Чтобы на самом деле получить статус git, перейдите на /var/www.git и выполните GIT_WORK_TREE=/var/www git status

PS: Почему вы делаете так много изменений и состояния git на вашем сервере? Ограничьте себя своим ПК.

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