Git: как сделать удаленное обновление каталога при нажатии на? - PullRequest
7 голосов
/ 16 сентября 2009

Я хочу использовать git для управления некоторыми данными на удаленном сервере, поэтому я установил там репозиторий non-bare . Я могу нажать на него без проблем, и само хранилище обновляется, но фактические файлы не изменяются / добавляются / удаляются. Я должен SSH на сервер и сделать

git reset --hard HEAD

, чтобы получить структуру файла для фактического обновления.

Что делать?

Ответы [ 4 ]

7 голосов
/ 16 сентября 2009

Ты не должен этого делать. Рекомендуется иметь голые репозитории. Другими словами, файлы не извлекаются, только сам каталог .git. Затем вы можете оформить репозиторий в другом месте на вашем сервере - скажем, в своем веб-корне. Таким образом, вы получите:

  • Git Best Practice. Согласно документации Git, вы можете получить «неожиданные результаты», если не будете следовать им. Любой, кто много занимался программированием, знает, что «неожиданные результаты» - это код для «вероятно, съест ваших детей, и его следует избегать любой ценой».

  • повышенная безопасность, если вы планируете, чтобы извлеченные файлы на сервере были доступны с веб-сервера.

  • Локальные изменения в выписанном коде и возможность быстро вносить изменения в действующий выписанный код. Вы можете попытаться сделать это непосредственно в хранилище, но это будет грязно и более подвержено ошибкам.

  • Возможность обновлять хранилище вашего сервера независимо от обновления вашего действующего кода сервиса. Это очень важно, если вы работаете удаленно и вам нужно что-то отправить на сервер, а затем выполнить дальнейшую работу, прежде чем он будет готов к вашей оперативной службе, или если у вас есть изменения в вашем коде активной службы (скажем, другие параметры конфигурации ) и нужно объединить эти изменения с изменениями в репо, но не могу сделать это сейчас.

Я бы порекомендовал следующие шаги:

  • Следуйте инструкциям git по настройке чистого хранилища
  • Проверьте код из вашего репо на целевой каталог прямой трансляции
  • Установите git hook (post-commit должен быть правильным IIRC) для обновления вашего живого сервиса при обновлении хранилища. Вероятно, он должен перейти к директории live service, выполнить команду git pull --rebase и, возможно, установить некоторые разрешения для файлов.
  • С этого момента просто отправляйте свой код в репозиторий из окна разработчика.
5 голосов
/ 15 ноября 2016

Это, к счастью, теперь поддерживается непосредственно в самом git! Вы можете найти детали в этом ответе, за который я только что проголосовал:

https://stackoverflow.com/a/38363683/85360

Рекомендуется настроить пульт с

git config receive.denyCurrentBranch updateInstead

чтобы в результате нажатия обновилась рабочая копия!

3 голосов
/ 16 сентября 2009

Использовать хук после обновления:

Крючки

Там вы можете выполнять все, что вы хотите в каждом обновлении.

1 голос
/ 28 января 2015

Git Version 1.9.1
Ubuntu Server 14.04 LTS
Сервер LAMP

Я настроил свой сервер LAMP на обновление моего рабочего каталога моего репозитория Git всякий раз, когда один из моих веб-разработчиков отправляет изменения на сервер. Я заметил, что журнал будет записывать новые коммиты, но не будет обновлять рабочий каталог. Вместо того, чтобы делать это вручную (git checkout -f) для каждого обновления, это можно настроить автоматически, чтобы сделать это после получения push.

  1. В каталоге «.git» перейдите в папку «hooks».
  2. Создайте файл с именем «post-receive» в папке «hooks» со следующим содержимым:

    #! / Bin / ш

    # Обновить рабочий каталог после получения push-запроса от удаленных клиентов.
    # Это должно быть направлено на рабочий каталог git.

    GIT_WORK_TREE = / var / www / dev_site git checkout -f

  3. Чтобы разрешить запуск файла, введите «chmod + x post-receive» в папке «hooks».

Теперь он будет обновлять рабочий каталог, когда коммиты отправляются в репозиторий Git. Мой сайт теперь показывает изменения, когда я посещаю его в браузере.

Мой рабочий каталог - / var / www / dev_site

...