Развертывание только измененной части сайта с git на ftp (svn2web для git) - PullRequest
9 голосов
/ 15 мая 2009

У меня есть сайт с большим количеством изображений. Источник (как и изображения) поддерживается с помощью git. Я хочу развернуть это через ftp на дешевом сервере, похожем на bluehost.

Я не хочу развертывать весь веб-сайт каждый раз (чтобы мне не приходилось загружать слишком много неизменных файлов снова и снова), но делать примерно следующее:

  1. В репозитории git пометьте последнюю развернутую ревизию тегом "развернуто".
  2. Когда я говорю «развернуть редакцию X», выясните, какие файлы изменились между редакцией X и редакцией, помеченной как развертывание, и загрузите только их.

По духу это похоже на svn2web . Но я хочу это для DVCS. Ртутная альтернатива будет рассмотрена.

Это довольно простой сценарий для написания, но я бы не стал изобретать велосипед, если в сети есть какой-то похожий сценарий.

Capistrano и fab, похоже, знают только, как продвигать всю ревизию в их интеграции SCM. Поэтому я не думаю, что могу использовать их в настоящее время.

Ответы [ 7 ]

6 голосов
/ 16 мая 2010

Я создал скрипт с именем git-deploy , надеюсь, он поможет.

6 голосов
/ 29 июля 2009

Сценарий git-ftp может быть тем, что вы ищете. Он принимает изменения локального репозитория git и синхронизирует его с удаленным репозиторием git по ftp.

Я использовал его, разместив git-репо, созданный с помощью параметра - bare . Поместите его на мой FTP-сервер.

чем побежал ./git-ftp.py. Он запрашивает имя пользователя ftp, пароль, хост ftp, локальный путь к git-репо, удаленный путь к git-репо (местоположение пустого репозитория).

Затем он подключается к репозиторию ftp git, а затем отправляет только разборы. (он использует библиотеку git-python для получения необходимой информации).

Сценарий имеет несколько проблем. Кажется, он всегда запрашивает данные об имени пользователя, и мне пришлось закомментировать строку 68.

#ftp.voidcmd('SITE CHMOD 755 ' + node.name).

Но эти вещи можно легко исправить.

Альтернативные

Если вы работаете на платформе nix, альтернативой является использование curlftpfs . Он смонтирует вашу учетную запись ftp как каталог устройства, из которого вы можете выполнять все обычные операции git (push, pull). Конечно, это решение не является конкретным.

Вы должны использовать опцию «голый», как указано выше, для репо, совместно используемой на FTP, а также запустить git update-server-info в репозитории перед передачей его по FTP.

Внимание : Это не очень хорошая идея, если вы планируете, чтобы несколько пользователей писали в ваш репозиторий git. У FTP нет механизма блокировки доступа. Вы закончите с поврежденным репо. Испытание перед сдачей в производство.

1 голос
/ 09 июня 2009

вы также можете использовать wput (wput --timestamping --reupload --dont-continue) - как wget только для загрузки по ftp

1 голос
/ 15 мая 2009

Другой вариант будет использовать git archive.

Конечно, как упоминал Джои в своем "git archive как формат пакета дистрибутива ":

Сложная часть использования архива git (или другого rcs) в качестве формата исходного пакета распространения заключается в обработке нетронутых архивов вышестоящих версий.

  • Один из подходов состоит в том, чтобы попытаться создать git-архив, который не включает объекты, присутствующие в вышестоящем архиве. Затем, чтобы распаковать пакет с исходным кодом, вы должны распаковать архив с исходным кодом, преобразовать файлы в нем в объекты git и добавить их в каталог .git.
    Похоже, что это возможно реализовать, но вам нужно знать достаточно много о внутренностях git, чтобы удалить избыточные объекты из репозитория git и восстановить их из архива.

  • Другой подход заключается в том, чтобы сохранить исходный архив исходных текстов в архиве git, и тогда пакет с исходным кодом будет полностью состоять из архива git . Это не имеет такого же приятного поведения при загрузке с минимальной пропускной способностью - если только вы не можете "git push" внести свои изменения, чтобы выполнить загрузку

Хранение большого количества исходных тарболов в git не будет эффективным , но скрипт pristine-tar позаботится об этом:

pristine-tar может сгенерировать нетронутый вышестоящий архив, используя только небольшой двоичный дельта-файл и копию исходного кода, что может быть проверкой контроля версий.
В пакет также входит команда pristine-gz, которая может восстановить исходный файл .gz.
Дельта-файл предназначен для проверки в системе контроля версий вместе с исходным кодом, что позволяет извлекать исходный архив из системы управления версиями.

Подробнее в заголовке этого скрипта perl pristine-tar .

1 голос
/ 15 мая 2009

Вы можете сохранить последнюю развернутую ревизию где-нибудь в файле, затем вы можете просто получить имя измененных файлов:

$ git diff --name-only $deployed $latest

Замените на соответствующие коды sha-1, или, например, $ latest может быть "master".

0 голосов
/ 26 июня 2017

Команда git-ftp push из git-ftp, кажется, работает очень хорошо.

Установите его

sudo apt-get install git-ftp

После установки настройте учетную запись ftp

git config git-ftp.url ftp.example.net
git config git-ftp.user your-ftp-user
git config git-ftp.password your-secr3t

Тогда сделай это впервые

git-ftp init

А потом, для каждого изменения вам просто нужно

git add -A
git commit -m "update"
git-ftp push

Файлы будут загружены в домашнюю директорию пользователя ~/.

0 голосов
/ 11 сентября 2014

Решение Tiny BASH для Mercurial: hg-deploy

...