Существует ли FTP или FTP-подобный клиент, который позволяет выполнять «дельта-загрузку», то есть загружать только те части файла, которые были изменены?

9

Я часто делаю небольшие изменения в довольно больших текстовых файлах через FTP ( CSS-файлы для веб-разработки ), и, поскольку мое интернет-соединение ужасно медленное, это очень болезненный процесс.

Даже если я изменю только один символ файла, мне все равно придется сидеть и ждать в течение значительного времени, пока весь файл повторно загружается на сервер.

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

Изменить: я думаю, что я неясно о том, как я использую свой FTP-клиент в данный момент. По сути, я открываю удаленный файл через SFTP, используя WinSCP. WinSCP сохраняет его в папку tmp, запускает Sublime Text, и я начинаю его редактировать. Когда я нажимаю «Сохранить», WinSCP автоматически перезагружает файл. Я никогда не сохраняю файл постоянно на моем компьютере - все делается через временную папку WinSCP. Вот почему я ищу решение, которое можно было бы использовать таким способом типа «беги и беги».


Предыдущее обсуждение

Ранее я писал этот вопрос на ServerFault, где предлагалось использовать что-то вроде git, однако, как я объяснил:

С помощью git или аналогичного инструмента управления версиями мне придется делать коммит каждый раз, когда я сохраняю файл, верно? Даже если бы это можно было сделать автоматически (т. Е. Если бы у меня был макрос, который сделал Ctrl-S в файле сохранения Sublime Text и одновременно выполнил команду git push), я мог бы сделать 50–100 крошечных правок файла CSS в час; наверняка я бы в конечном итоге получил спам-лог фиксации? Кроме того, решение git негибко, поскольку оно основывается на любом редактируемом мной файле, являющемся частью git-репо.

Единственное решение, о котором я могу подумать, это какой-то взломанный процесс, использующий rsync, но даже тогда он очень сложный:

  1. Я загружаю необходимые файлы на свой компьютер (через FTP / rsync / что угодно).
  2. Я открываю файл в (например) Sublime Text и начинаю вносить изменения.
  3. Фоновый процесс отслеживает изменения файлов в папке. Когда я сохраняю файл, этот процесс немедленно запускает операцию rsync с моего компьютера на сервер, передавая измененные части файла.

Однако мне нужно вручную настроить или указать пути к удаленным файлам или каталогам, иначе локальный сценарий rsync не будет знать, где rsync файлы, поэтому этот метод все еще довольно негибкий. Этот метод не позволил бы мне мгновенно перейти к случайному файлу, открыть его и сохранить как FTP-клиент.

Там также нет видимой обратной связи, как индикатор загрузки с этим методом.

WackGet
источник
7
Использование git действительно правильный ответ. То, что вы ищете здесь, это обходной путь для плохой практики. Что, если вы делаете что-то не так и ломаете вещи? Git дает вам откаты.
TRiG
1
Я не согласен. Что если вы просто хотите изменить одну строку большого текстового файла, который не является частью репо? Что если ваша организация не разрешает или не поддерживает git? Мой вариант использования заключается в том, что я делаю сотни крошечных изменений в файлах, которые размещаются удаленно и которые необходимо редактировать «вживую» и «на месте».
WackGet
У меня нет времени на тестирование большого файла прямо сейчас, поэтому я опубликую это как комментарий, а не как ответ, но загляну в Beyond Compare - это кроссплатформенный файл различий GUI, который может редактировать через FTP / SFTP, и вы можете выберите строки для синхронизации. Вероятно, все еще не идеал, но выполнимый. У них тоже есть бесплатная пробная версия.
Ник

Ответы:

7

Vim имеет встроенный плагин под названием netrw, который позволяет Vim редактировать удаленные файлы. Rsync - это один из протоколов, которые он может использовать:

:e rsync://user@hostname:port/path
:w rsync://user@hostname:port/path

Конечно, если у вас есть SSH-доступ к удаленной машине, и на ней установлен Vim, может быть проще просто использовать Vim удаленно. Nano, Emacs и другие редакторы с интерфейсами командной строки также являются опциями в этом случае. Однако, в зависимости от того, насколько плохое ваше соединение, это может быть не очень приятным вариантом.


Это все сказано,

внесение сотен крошечных изменений в файлы, которые размещены удаленно и которые должны редактироваться «вживую» и «на месте»

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

8bittree
источник
SSH кажется очевидным ответом, если на сервере установлена ​​любая версия Linux. Если он еще не запущен на сервере, я бы нажал на администратора сервера, чтобы настроить это.
Чарльз Бердж
Спасибо вам обоим; У меня есть полный доступ по SSH и я могу настроить все, что нужно на сервере. Я не могу использовать Vim удаленно, потому что задержка часто очень высока. Также я хотел бы иметь возможность использовать настольные редакторы, такие как Sublime. Я думаю, что мне неясно, как я сейчас использую свой FTP-клиент - в основном, я открываю удаленный файл с помощью WinSCP, начинаю редактировать его, и когда я нажимаю сохранить, WinSCP автоматически перезагружает файл. На самом деле я не загружаю его в какой-либо постоянный каталог на моем компьютере - все делается через временную папку WinSCP. Я отредактирую свой вопрос и уточню.
WackGet
@WackGet Vim работает и на рабочем столе, он называется GVim. Cream - это особая конфигурация Vim, которая должна быть относительно простой для тех, кто более привык к таким редакторам, как Sublime, Notepad или Textmate. То, что вы делаете с WinSCP, по сути, работает как netrw. Он загружает во временную папку, ждет, пока вы сохраните, а затем записывает его обратно на удаленный сервер, используя протокол, который вы указали.
8bittree
@ 8bittree Спасибо, это наверняка пригодится. Я не буду отмечать это как ответ на мой оригинальный вопрос, потому что он ограничивает вас использованием плагина на основе Vim. Если бы кто-то мог внедрить netrw-подобные дельта-переводы в FTP или FTP-подобный клиент, то это было бы идеально. В настоящее время я еще не нашел это, но я надеюсь, что это существует.
WackGet
1

Beyond Compare - это инструмент сравнения, который может сравнивать и объединять папки и файлы; FTP-серверы также поддерживаются и могут обрабатываться как локальные папки. Это проприетарное право, пожизненная лицензия на одну установку стоит 30 долларов США за стандартную версию (с FTP) или 60 долларов США за профессиональную версию (с SFTP). Он работает на Windows, Mac OS и Linux. Лично я разрабатываю свой веб-сайт на своем домашнем компьютере и загружаю изменения на свой веб-сервер, когда я счастлив. Я проверяю изменения вручную с Beyond Compare, но это тоже можно автоматизировать. Вы можете попробовать и посмотреть, загружает ли он только полные файлы или куски изменений; Я не уверен в этом.

Стефан Требу
источник
Вне сравнения - это здорово - идеально, если у вас нет доступа по SSH, но вам все равно нужно убедиться, что файлы синхронизируются на удаленном сервере (поддерживается FTP через SSL)
Сэм