Existe um cliente FTP ou semelhante ao FTP que permite "uploads delta" - ou seja, apenas o upload das partes de um arquivo que foram alteradas?

9

Frequentemente faço pequenas alterações em arquivos de texto bastante grandes via FTP ( arquivos CSS para desenvolvimento na web ) e, como minha conexão com a Internet é terrivelmente lenta, é um processo muito doloroso.

Mesmo que eu mude apenas um caractere do arquivo, ainda tenho que esperar um tempo considerável enquanto o arquivo inteiro é carregado novamente no servidor.

Existe alguma maneira de editar arquivos hospedados remotamente no meu computador local e quando eu salvar o arquivo, carregue apenas as partes do arquivo que foram alteradas ?

Edit: Eu acho que não tenho certeza sobre como estou usando meu cliente FTP no momento. Basicamente, abro um arquivo remoto por SFTP usando o WinSCP. O WinSCP o salva em uma pasta tmp, inicia o Sublime Text e eu começo a editá-lo. Quando clico em Salvar, o WinSCP carrega novamente o arquivo automaticamente. Na verdade, nunca estou salvando o arquivo permanentemente no meu computador - tudo é feito através da pasta temporária do WinSCP. É por isso que estou procurando uma solução que possa ser usada dessa maneira "bater e correr".


Discussão anterior

Anteriormente, eu postei essa pergunta no ServerFault, onde foi sugerido o uso de algo como git, no entanto, como expliquei:

Com o git ou uma ferramenta de versão semelhante, eu teria que fazer uma confirmação sempre que salvar o arquivo, certo? Mesmo que isso pudesse ser feito automaticamente (ou seja, se eu tivesse uma macro que fizesse o Ctrl-S no Sublime Text salvar o arquivo e executar um push git ao mesmo tempo), eu poderia fazer de 50 a 100 pequenas edições de um arquivo CSS por hora; certamente acabaria com um log de confirmação com spam? Além disso, a solução git é inflexível, pois depende de qualquer arquivo que estou editando que faz parte de um repositório git.

A única solução que consigo pensar até agora é algum tipo de processo hackeado usando o rsync, mas mesmo assim é muito complicado:

  1. Faço o download dos arquivos necessários para o meu computador (via FTP / rsync / o que for).
  2. Abro um arquivo em (por exemplo) Sublime Text e começo a fazer edições.
  3. Um processo em segundo plano está monitorando a pasta quanto a modificações no arquivo. Quando salvo um arquivo, esse processo dispara instantaneamente uma operação rsync do meu computador para o servidor, transferindo as partes alteradas do arquivo.

No entanto, eu precisaria configurar ou especificar manualmente os caminhos de arquivos ou diretórios remotos, caso contrário, o script rsync local não saberá onde sincronizar novamente os arquivos, para que esse método ainda seja bastante inflexível. Esse método não me permite procurar instantaneamente um arquivo aleatório, abri-lo e salvá-lo como faz um cliente FTP.

Também não há comentários visíveis, como uma barra de progresso do upload com esse método.

WackGet
fonte
7
Usar o git é realmente a resposta certa. O que você procura aqui é uma solução alternativa para práticas inadequadas. E se você fizer algo errado e quebrar as coisas? O Git oferece reversões.
TRiG 12/10
1
Discordo. E se você simplesmente quiser alterar uma única linha de um arquivo de texto grande que não faz parte de um repositório? E se a sua organização não permitir ou suportar o git? Meu caso de uso é que estou fazendo centenas de pequenas alterações em arquivos hospedados remotamente e que devem ser editados "ao vivo" e "no local".
WackGet
Não tenho tempo para testar um arquivo grande no momento. Portanto, postando isso como um comentário, não como uma resposta, mas consulte o Beyond Compare - é um arquivo diff de GUI de plataforma cruzada que pode editar por FTP / SFTP e você pode escolha quais linhas sincronizar. Provavelmente ainda não é o ideal, mas viável. Eles também têm um teste gratuito.
Nick

Respostas:

7

O Vim possui um plug-in embutido chamado netrw, que permite ao Vim editar arquivos remotos. Rsync é um dos protocolos que pode ser usado:

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

Obviamente, se você tiver acesso SSH à máquina remota e o Vim estiver instalado, pode ser mais simples usar o Vim remotamente. Nano, Emacs e outros editores com interfaces de linha de comando também são opções nesse caso. Porém, dependendo de quão ruim é sua conexão, essa pode não ser uma opção agradável.


Tudo isso dito,

fazendo centenas de pequenas alterações nos arquivos hospedados remotamente e que devem ser editados "ao vivo" e "no local"

sem um sistema confiável de reversão, como o que o git pode oferecer, você e sua organização imploram por agonia quando cometem os erros inevitáveis ​​que podem muito bem passar despercebidos até que você se esqueça exatamente do que fez.

8bittree
fonte
O SSH parece ser a resposta óbvia se o servidor estiver executando qualquer versão do Linux. Se ainda não estiver em execução no servidor, eu pressionaria o administrador do servidor para configurá-lo.
Charles Burge 12/10
Obrigado a ambos; Eu tenho acesso SSH completo e posso configurar o que for necessário no servidor. Não consigo usar o Vim remotamente porque a latência geralmente é muito alta. Também gostaria de poder usar editores de desktop como o Sublime. Acho que não tenho certeza de como estou usando meu cliente de FTP no momento - basicamente, abro um arquivo remoto usando o WinSCP, começo a editá-lo e, quando clico em salvar, o WinSCP reenvia o arquivo automaticamente. Na verdade, não estou baixando para nenhum diretório permanente no meu computador - tudo é feito através da pasta temporária do WinSCP. Vou editar minha pergunta e esclarecer.
WackGet
O @WackGet Vim também funciona na área de trabalho, chamado GVim. Cream é uma configuração específica do Vim que deve ser relativamente fácil para aqueles mais acostumados a editores como Sublime, Notepad ou Textmate. O que você está fazendo com o WinSCP é essencialmente como o netrw funciona. Ele faz o download para um local temporário, espera que você salve e depois grava de volta no servidor remoto, usando o protocolo que você especificou.
8bittree
@ 8bittree Obrigado, isso certamente será útil. Não marcarei esta como resposta à minha pergunta original porque ela limita o uso do plug-in baseado no Vim. Se alguém pudesse implementar transferências delta do tipo netrw para um cliente FTP ou do tipo FTP, isso seria perfeito. Atualmente ainda não o encontrei, mas espero que exista.
WackGet
1

Beyond Compare é uma ferramenta diff que pode comparar e mesclar pastas e arquivos; Os servidores FTP também são suportados e podem ser manipulados como uma pasta local. É proprietária, uma licença vitalícia para uma instalação custa 30 USD para a edição padrão (com FTP) ou 60 USD para a edição profissional (com SFTP). É executado no Windows, Mac OS e Linux. Pessoalmente, desenvolvo meu site no meu computador doméstico e carrego as alterações no meu servidor Web quando estou feliz. Eu passo as alterações manualmente com o Beyond Compare, mas isso também pode ser automatizado. Você pode tentar e ver se ele carrega apenas arquivos completos ou pedaços de alterações; Eu não tenho certeza sobre isso.

Stéphane Tréboux
fonte
Além de comparação é incrível - perfeito se você não tiver acesso SSH, mas você ainda precisa fazer arquivos com certeza são sincronizados em um servidor remoto (FTP sobre SSL é suportado)
Sam Heuck