Existe-t-il un client FTP ou FTP qui autorise les «téléchargements delta» - c'est-à-dire uniquement le téléchargement des parties d'un fichier qui ont été modifiées?

9

J'apporte fréquemment de petites modifications à des fichiers texte assez volumineux via FTP ( fichiers CSS pour le développement Web ) et parce que ma connexion Internet est terriblement lente, c'est un processus très douloureux.

Même si je ne change qu'un seul caractère du fichier, je dois encore m'asseoir et attendre un temps considérable pendant que le fichier entier est re-téléchargé sur le serveur.

Existe-t-il un moyen de modifier des fichiers hébergés à distance sur mon ordinateur local et lorsque j'enregistre le fichier, ne télécharge que les parties du fichier qui ont changé ?

Edit: Je pense que je ne sais pas comment j'utilise mon client FTP pour le moment. Fondamentalement, j'ouvre un fichier distant via SFTP en utilisant WinSCP. WinSCP l'enregistre dans un dossier tmp, lance Sublime Text et je commence à le modifier. Lorsque j'appuie sur Enregistrer, WinSCP télécharge automatiquement le fichier. Je ne sauvegarde jamais le fichier en permanence sur mon ordinateur - tout se fait via le dossier temporaire de WinSCP. C'est pourquoi je recherche une solution qui peut être utilisée de cette manière "hit and run".


Discussion précédente

J'ai déjà posté cette question sur ServerFault où l'utilisation de quelque chose comme git a été suggérée, mais comme je l'ai expliqué:

Avec git ou un outil de versioning similaire, je devrais faire un commit chaque fois que j'enregistre le fichier, non? Même si cela pouvait être fait automatiquement (c'est-à-dire si j'avais une macro qui faisait Ctrl-S dans le fichier de sauvegarde Sublime Text et exécutait une poussée git en même temps), je pourrais faire 50 à 100 minuscules modifications d'un fichier CSS par heure; je finirais sûrement avec un journal de commit spammé? De plus, la solution git est inflexible car elle repose sur le fichier que je modifie faisant partie d'un dépôt git.

La seule solution à laquelle je peux penser jusqu'à présent est une sorte de processus piraté utilisant rsync mais même alors, c'est très compliqué:

  1. Je télécharge les fichiers dont j'ai besoin sur mon ordinateur (via FTP / rsync / autre).
  2. J'ouvre un fichier (par exemple) Sublime Text et commence à faire des modifications.
  3. Un processus d'arrière-plan surveille le dossier pour les modifications de fichiers. Lorsque j'enregistre un fichier, ce processus déclenche instantanément une opération rsync de mon ordinateur vers le serveur, transférant les parties modifiées du fichier.

Cependant, je devrais configurer ou spécifier manuellement le chemin du fichier ou du répertoire distant, sinon le script rsync local ne saura pas où rsync les fichiers, de sorte que cette méthode est encore assez rigide. Cette méthode ne me permettrait pas de parcourir instantanément un fichier aléatoire, de l'ouvrir et de l'enregistrer comme le fait un client FTP.

Il n'y a pas non plus de retour visible comme une barre de progression de téléchargement avec cette méthode.

WackGet
la source
7
Utiliser git est vraiment la bonne réponse. Ce que vous recherchez ici est une solution de contournement pour les mauvaises pratiques. Et si vous faites quelque chose de mal et cassez des choses? Git vous propose des rollbacks.
TRiG
1
Je ne suis pas d'accord. Que faire si vous souhaitez simplement modifier une seule ligne d'un gros fichier texte qui ne fait pas partie d'un dépôt? Que faire si votre organisation n'autorise pas ou ne prend pas en charge git? Mon cas d'utilisation est que j'apporte des centaines de petites modifications à des fichiers hébergés à distance et qui doivent être modifiés "en direct" et "sur place".
WackGet du
Je n'ai pas le temps de tester sur un gros fichier pour le moment, alors postez ceci comme un commentaire, pas une réponse, mais regardez Beyond Compare - c'est un fichier diff GUI multiplateforme qui peut éditer via FTP / SFTP et vous pouvez choisissez les lignes à synchroniser. Probablement toujours pas idéal, mais réalisable. Ils ont aussi un essai gratuit.
Nick

Réponses:

7

Vim a un plugin intégré appelé netrw, qui permet à Vim de modifier des fichiers distants. Rsync est l'un des protocoles qu'il peut utiliser:

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

Bien sûr, si vous avez un accès SSH à la machine distante et que Vim y est installé, il peut être plus simple d'utiliser simplement Vim à distance. Nano, Emacs et d'autres éditeurs avec des interfaces de ligne de commande sont également des options dans ce cas. En fonction de la gravité de votre connexion, cela peut ne pas être une option agréable.


Cela dit,

apporter des centaines de petites modifications à des fichiers hébergés à distance et qui doivent être modifiés "en direct" et "sur place"

sans un système de restauration fiable tel que ce que git peut fournir, c'est que vous et votre organisation ne faites que mendier l'agonie lorsque vous faites les inévitables erreurs qui peuvent très bien passer inaperçues jusqu'à ce que vous ayez oublié exactement ce que vous avez fait.

8bittree
la source
SSH semble être la réponse évidente si le serveur exécute une version de Linux. S'il ne fonctionne pas déjà sur le serveur, j'appuierais sur l'administrateur du serveur pour le configurer.
Charles Burge du
Merci à vous deux; J'ai un accès SSH complet et je peux configurer tout ce qui est nécessaire sur le serveur. Je ne peux pas utiliser Vim à distance car la latence est souvent très élevée. J'aimerais aussi pouvoir utiliser des éditeurs de bureau comme Sublime. Je pense que je ne sais pas comment j'utilise mon client FTP pour le moment - en gros, j'ouvre un fichier distant à l'aide de WinSCP, commence à le modifier et lorsque je clique sur Enregistrer, WinSCP télécharge automatiquement le fichier. Je ne le télécharge pas réellement dans un répertoire permanent de mon ordinateur - tout se fait via le dossier temporaire de WinSCP. Je vais modifier ma question et clarifier.
Wackget
@WackGet Vim fonctionne également sur le bureau, il s'appelle GVim. Cream est une configuration particulière de Vim qui est censée être relativement facile pour ceux qui sont plus habitués aux éditeurs comme Sublime, Notepad ou Textmate. Ce que vous faites avec WinSCP est essentiellement le fonctionnement de netrw. Il se télécharge dans un emplacement temporaire, attend que vous l'enregistriez, puis le réécrit sur le serveur distant, en utilisant le protocole que vous avez spécifié.
8bittree
@ 8bittree Merci, cela vous sera certainement utile. Je ne marquerai pas celui-ci comme la réponse à ma question d'origine car il vous limite à utiliser le plugin basé sur Vim. Si quelqu'un pouvait implémenter des transferts delta de type netrw dans un client FTP ou FTP, ce serait parfait. Actuellement, je ne l'ai pas encore trouvé, mais j'espère qu'il existe.
WackGet
1

Beyond Compare est un outil de comparaison qui peut comparer et fusionner des dossiers et des fichiers; Les serveurs FTP sont également pris en charge et peuvent être gérés comme un dossier local. Il est propriétaire, une licence à vie pour une installation coûte 30 USD pour l'édition standard (avec FTP) ou 60 USD pour l'édition professionnelle (avec SFTP). Il fonctionne sous Windows, Mac OS et Linux. Personnellement, je développe mon site Web sur mon ordinateur personnel et télécharge les modifications sur mon serveur Web lorsque je suis satisfait. Je passe par les changements à la main avec Beyond Compare mais cela peut aussi être automatisé. Vous pouvez l'essayer et voir s'il ne télécharge que des fichiers complets ou des morceaux de modifications; Je ne suis pas sûre à propos de ça.

Stéphane Tréboux
la source
Au-delà de la comparaison, c'est génial - parfait si vous n'avez pas d'accès SSH, mais vous devez toujours vous assurer que les fichiers sont synchronisés sur un serveur distant (FTP sur SSL est pris en charge)
Sam Heuck