Получить изменения с сайта mercurial на FTP

Я работаю с партнером на PHP-сайте для клиента. У нас есть общий Mercurial-репозиторий (на Bitbucket), как локальные копии, так и живые сайты. У нас есть только FTP-доступ к текущему сайту (который не может быть изменен, поскольку это пакет хостинга только с FTP).

Я хочу, чтобы иметь возможность перенаправлять изменения из репозитория на сайт в реальном времени.

До сих пор я просто отслеживаю измененные файлы в репо и копирую их вручную с помощью FileZilla - подверженной ошибкам и раздражающей задачи. Моя идея состоит в том, чтобы локально локализовать удаленное местоположение (т.е. С помощью CurlFtpFS) и сказать mercurial, чтобы автоматически копировать измененные файлы на сайт. В идеале я хочу указать, какие изменения, но это будет бонус. Было бы достаточно, если локальное состояние файлов в репо синхронизируется.

Есть ли хороший способ сделать это с помощью средств командной строки linux?

Ответ 1

Моя первая рекомендация, если это вообще возможно, получить пакет, который позволяет больше доступа. FTP только жесток.

Но поскольку вы ищете реальный ответ на свой вопрос, у меня есть две идеи для вас:

  • Я бы предложил посмотреть на mercurial FTP-расширение. Я лично никогда не использовал его, так как я никогда не зацикливался на ситуации, связанной с ftp (хотя бы надолго), но выглядит многообещающим. Похоже, если вы убедитесь, что вы помечаете свои выпуски, это будет очень хорошо работать для вас. (обязательно используйте параметр -uploaded)

  • Кроме того, если вы только хотите, чтобы наконечник был установлен на вашем рабочем env, вы можете посмотреть предложение Martin Geisler сделанное на несколько дней назад, группа пользователей bitbucket. В принципе, его предложение состоит в том, чтобы использовать функциональность "ping url" битбакет. Вам нужно будет написать серверный обработчик script/url, который будет принимать этот пинг, затем вытащить наконечник из битбакета (в виде zip файла), а затем распаковать/распаковать его. Это немного сложно, но если вы ищете полную автоматизацию, и наконечник всегда будет лучшим, это может сработать для вас.

Ответ 2

Одно из них - использование команды hg archive:

hg archive /path/to/curlftpsfs

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

Другой вариант - создать клон Mercurial в том же /path/to/curlftpsfs, а затем просто сделать hg pull ; hg update в нем на вашей локальной системе с удаленным. Первоначально установка этого будет означать передачу всего этого, но в дальнейшем вы будете отправлять только дельта.

Некоторым людям не нравятся эти последние параметры, поскольку он предоставляет весь ваш репозиторий /.hg, но вы можете заблокировать доступ к нему на веб-сервере.

Ответ 3

Я столкнулся с этой проблемой некоторое время назад после переключения с AWS на локальный веб-хостинг, который обеспечивает только ssh/ftp.

Мой предыдущий подход к обновлению производственного сайта на AWS с использованием "hg pull; hg update -C" больше не может использоваться на новом веб-хостинге. Они не имеют меркурий, установленных для общих хостов.

Итак, я сделал, чтобы смонтировать удаленное местоположение с помощью ftp, на локальный компьютер (т.е. ваш ноутбук), а затем запустить команды hg pull и update локально на вашем компьютере по пути, на котором установлен удаленный ftp-сайт.

Ответ 4

Решение для Windows:

BeyondCompare (http://www.scootersoftware.com/) - потрясающая часть программного обеспечения. Помимо того, что он является удивительным, он может отображать вашу локальную папку на FTP-сайте. Он сравнивает файлы и передает только новые.