¿Existe un FTP o un cliente similar a FTP que permite "cargas delta", es decir, solo carga las partes de un archivo que se han cambiado?

9

Con frecuencia hago pequeños cambios en archivos de texto bastante grandes a través de FTP ( archivos CSS para desarrollo web ) y debido a que mi conexión a Internet es terriblemente lenta, es un proceso muy doloroso.

Incluso si cambio solo un carácter del archivo, todavía tengo que sentarme y esperar un tiempo considerable mientras todo el archivo se vuelve a cargar en el servidor.

¿Hay alguna forma de editar archivos alojados de forma remota en mi computadora local y cuando guardo el archivo, solo subo las partes del archivo que cambiaron ?

Editar: creo que no tengo claro cómo estoy usando mi cliente FTP en este momento. Básicamente, abro un archivo remoto a través de SFTP usando WinSCP. WinSCP lo guarda en una carpeta tmp, inicia Sublime Text y comienzo a editarlo. Cuando presiono guardar, WinSCP vuelve a cargar el archivo automáticamente. En realidad, nunca estoy guardando el archivo permanentemente en mi computadora; todo se hace a través de la carpeta temporal de WinSCP. Es por eso que estoy buscando una solución que pueda usarse de esta manera de "golpear y correr".


Discusión previa

Anteriormente publiqué esta pregunta en ServerFault donde se sugirió usar algo como git, sin embargo, como lo expliqué:

Con git o una herramienta de control de versiones similar, tendría que hacer una confirmación cada vez que guarde el archivo, ¿verdad? Incluso si eso pudiera hacerse automáticamente (es decir, si tuviera una macro que hiciera Ctrl-S en Sublime Text guardar archivo y ejecutara un git push al mismo tiempo), podría hacer 50 - 100 pequeñas ediciones de un archivo CSS por hora; ¿seguramente terminaría con un registro de confirmación de correo no deseado? Además, la solución git es inflexible, ya que depende del archivo que estoy editando como parte de un repositorio git.

La única solución en la que puedo pensar hasta ahora es algún tipo de proceso pirateado usando rsync, pero aun así, es muy complicado:

  1. Descargo los archivos que necesito en mi computadora (a través de FTP / rsync / lo que sea).
  2. Abro un archivo en (por ejemplo) Sublime Text y empiezo a hacer ediciones.
  3. Un proceso en segundo plano está monitoreando la carpeta en busca de modificaciones en el archivo. Cuando guardo un archivo, ese proceso desencadena instantáneamente una operación rsync desde mi computadora al servidor, transfiriendo las partes cambiadas del archivo.

Sin embargo, necesitaría configurar o especificar manualmente el archivo remoto o las rutas de directorio o de lo contrario el script rsync local no sabrá dónde sincronizar los archivos, por lo que este método sigue siendo bastante inflexible. Este método no me permite buscar instantáneamente un archivo aleatorio, abrirlo y guardarlo como lo hace un cliente FTP.

Tampoco hay comentarios visibles como una barra de progreso de carga con este método.

WackGet
fuente
77
Usar git realmente es la respuesta correcta. Lo que está buscando aquí es una solución para la mala práctica. ¿Qué pasa si haces algo mal y rompes cosas? Git te da retrocesos.
TRiG
1
Estoy en desacuerdo. ¿Qué sucede si simplemente desea cambiar una sola línea de un archivo de texto grande que no es parte de un repositorio? ¿Qué pasa si su organización no permite ni admite git? Mi caso de uso es que estoy haciendo cientos de pequeños cambios en los archivos que están alojados de forma remota y que deben editarse "en vivo" y "en su lugar".
WackGet
No tengo tiempo para probar en un archivo grande en este momento, así que publique esto como un comentario, no como una respuesta, pero busque en Beyond Compare: es un archivo de interfaz gráfica de usuario multiplataforma que puede editar a través de FTP / SFTP y puede elige las líneas para sincronizar. Probablemente todavía no sea ideal, pero viable. También tienen una prueba gratuita.
Nick

Respuestas:

7

Vim tiene un complemento incorporado llamado netrw, que le permite editar archivos remotos. Rsync es uno de los protocolos que puede usar:

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

Por supuesto, si tiene acceso SSH a la máquina remota y Vim está instalado en ella, puede ser más simple usar Vim de forma remota. Nano, Emacs y otros editores con interfaces de línea de comandos también son opciones en ese caso. Sin embargo, dependiendo de qué tan mala sea su conexión, esta podría no ser una opción agradable.


Todo dicho

realizar cientos de pequeños cambios en los archivos que se alojan de forma remota y que deben editarse "en vivo" y "en su lugar"

sin un sistema de reversión confiable, como lo que git puede proporcionar es que usted y su organización simplemente piden agonía cuando comete los errores inevitables que pueden pasar desapercibidos hasta que haya olvidado exactamente lo que hizo.

8bittree
fuente
SSH parece ser la respuesta obvia si el servidor ejecuta alguna versión de Linux. Si aún no se está ejecutando en el servidor, estaría presionando el administrador del servidor para configurarlo.
Charles Burge
Gracias a los dos; Tengo acceso SSH completo y puedo configurar lo que sea necesario en el servidor. No puedo usar Vim de forma remota porque la latencia suele ser muy alta. También me gustaría poder usar editores de escritorio como Sublime. Creo que no tengo claro cómo estoy usando mi cliente FTP en este momento: básicamente, abro un archivo remoto con WinSCP, empiezo a editarlo y cuando presiono guardar, WinSCP vuelve a cargar el archivo automáticamente. En realidad no lo estoy descargando a ningún directorio permanente en mi computadora; todo se hace a través de la carpeta temporal de WinSCP. Editaré mi pregunta y aclararé.
WackGet
@WackGet Vim también funciona en el escritorio, se llama GVim. Cream es una configuración particular de Vim que se supone que es relativamente fácil para aquellos más acostumbrados a editores como Sublime, Notepad o Textmate. Lo que está haciendo con WinSCP es esencialmente cómo funciona netrw. Se descarga en una ubicación temporal, espera a que guarde, luego lo vuelve a escribir en el servidor remoto, utilizando el protocolo que haya especificado.
8bittree
@ 8bittree Gracias, esto ciertamente será útil. No marcaré esta como la respuesta a mi pregunta original porque te limita a usar el complemento basado en Vim. Si alguien pudiera implementar transferencias delta tipo netrw en un cliente FTP o tipo FTP, entonces sería perfecto. Actualmente no he encontrado esto todavía, pero espero que exista.
WackGet
1

Beyond Compare es una herramienta de diferencias que puede comparar y fusionar carpetas y archivos; Los servidores FTP también son compatibles y se pueden manejar como una carpeta local. Es propietario, una licencia de por vida para una instalación cuesta 30 USD para la edición estándar (con FTP) o 60 USD para la edición profesional (con SFTP). Se ejecuta en Windows, Mac OS y Linux. Personalmente desarrollo mi sitio web en la computadora de mi casa y subo los cambios a mi servidor web cuando estoy contento. Reviso los cambios a mano con Beyond Compare, pero esto también se puede automatizar. Puede probarlo y ver si solo carga archivos completos o fragmentos de cambios; No estoy seguro de eso.

Stéphane Tréboux
fuente
Más allá de comparar es increíble: perfecto si no tiene acceso SSH, pero aún necesita asegurarse de que los archivos estén sincronizados en un servidor remoto (se admite FTP sobre SSL)
Sam Heuck