Развертывание только измененной части веб-сайта с мерзавцем к ftp (svn2web для мерзавца)

Git - это децентрализованная система контроля версий, поэтому она предназначена для работы с несколькими удаленными репозиториями. Вы можете добавить свой репозиторий github / bitbucket в качестве нового удаленного элемента вашего локального репозитория с помощью следующей команды:

git remote add https://github.com/user/repo.git

Затем, если вы хотите передать в определенный удаленный репозиторий, вы Можно использовать эту команду:

git push  

Хорошее введение в работу с несколькими репозиториями можно найти в Pro Git book .

9
задан Martin Geisler 26 May 2009 в 09:13
поделиться

5 ответов

Возможно, вы ищете сценарий 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). Конечно, это решение не является специфическим для git.

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

Внимание : это не очень хорошая идея, если вы планируете иметь несколько пользователей для записи в репозиторий git. Поскольку FTP не имеет механизма БЛОКИРОВКИ доступа. Вы получите коррумпированное репо. Протестируйте перед запуском в производство.

6
ответ дан 4 December 2019 в 13:49
поделиться

Другой вариант - использовать архив git .

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

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

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

  • Другой подход - сохраните первичный tarball-файл в архиве git, и тогда исходный пакет будет полностью состоять из архива git . У этого нет такого же приятного поведения при загрузке с минимальной пропускной способностью - если вы не можете « git push » ваши изменения для выполнения загрузки

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

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

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

1
ответ дан 4 December 2019 в 13:49
поделиться

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

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

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

1
ответ дан 4 December 2019 в 13:49
поделиться

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

1
ответ дан 4 December 2019 в 13:49
поделиться

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

6
ответ дан 4 December 2019 в 13:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: