Pour comparer un dossier de projet sur votre Mac avec une copie située sur un serveur accessible via SSH, utilisez rsync en mode simulation (dry-run). Il permet de lister les fichiers qui semblent désynchronisés, sans les transférer ni les modifier. Pour observer les différences de texte à l'intérieur d'un même fichier, utilisez diff après avoir rapatrié les deux versions sur votre Mac. Ce guide se concentre sur la comparaison d'un répertoire de projet local avec un répertoire distant ; il ne présume pas que les deux copies sont synchronisées et ne détermine pas quelle version doit l'emporter.

Vérifiez d'abord la connexion et les chemins

Ouvrez Terminal sur votre Mac. Apple documente SSH comme l'un des protocoles que Terminal peut utiliser pour se connecter à des serveurs distants ; avec le client en ligne de commande ssh, vous pouvez également exécuter une commande sur la machine distante. Vous aurez besoin d'un nom de serveur, d'un compte distant, d'un accès au répertoire du projet et d'une authentification SSH fonctionnelle. Le guide de Terminal d'Apple et le manuel ssh d'OpenBSD décrivent ces options de connexion.

Remplacez les exemples de compte, d'hôte et de noms de dossier ci-dessous par les vôtres. La machine distante doit avoir rsync installé et accessible pour votre compte. rsync --version affiche la version locale ; une version distante peut être vérifiée avec ssh user@host rsync --version.

ssh user@server.example.com

Si cette connexion échoue, résolvez le problème d'hôte, d'authentification, de réseau ou d'accès avant de comparer les fichiers. Identifiez ensuite précisément les deux répertoires de projet. Dans les exemples, /Users/you/Projects/site est local et /srv/projects/site est distant. Conservez la barre oblique finale (trailing slash) sur chaque chemin de répertoire pour comparer le contenu des dossiers selon la même disposition relative. Mettez entre guillemets les chemins contenant des espaces.

Prévisualiser les fichiers qui diffèrent

Exécutez cette commande depuis votre Mac :

rsync -rnic --out-format='%i %n' \
  user@server.example.com:/srv/projects/site/ \
  /Users/you/Projects/site/

Le chemin distant est la source et le chemin Mac est la destination. La commande utilise la récursivité (-r), la liste détaillée des changements par élément (-i), la comparaison par somme de contrôle / checksum (-c) et le mode simulation / dry-run (-n). La documentation de rsync indique que les simulations n'apportent aucune modification ; la sortie détaillée fournit une liste concise des mises à jour proposées. Dans ce sens, un élément listé signifie que la source distante diffère de la destination locale ou y est absente. Le manuel de rsync documente les simulations, les modifications détaillées et la comparaison par somme de contrôle.

Le mode checksum lit les données des fichiers des deux côtés pour en comparer le contenu ; il peut donc prendre plus de temps et consommer davantage d'E/S disque que la vérification rapide par défaut de rsync, qui s'appuie sur la taille du fichier et la date de modification. Utilisez -nic lorsque le contenu importe, même si les horodatages ou les tailles ne révèlent pas nécessairement de changement. Pour un premier passage plus rapide, utilisez plutôt -rin ; cette option signale les modifications détectées par la vérification rapide de rsync et peut manquer des modifications de contenu lorsque la taille et l'horodatage sont identiques. La prévisualisation n'affiche pas les lignes modifiées à l'intérieur des fichiers.

Inversez les deux chemins si la copie sur le Mac doit être traitée comme la source et la copie distante comme la destination. Le sens a son importance : les marqueurs détaillés de rsync reflètent ce qu'il mettrait à jour au niveau de la destination. Conservez -n pendant l'examen des résultats. Ne le retirez que si vous décidez délibérément d'effectuer un transfert ; rsync est un outil de copie, pas un outil de fusion bidirectionnelle.

Lire le contenu des différences d'un fichier texte

Pour inspecter les changements réels ligne par ligne, comparez deux fichiers locaux avec diff -u. Copiez d'abord une version vers un emplacement temporaire distinct à l'aide de votre méthode de transfert habituelle autorisée, ou utilisez une copie du projet que vous possédez déjà localement. Exécutez ensuite :

diff -u \
  "/Users/you/Projects/site/config/settings.yml" \
  "/Users/you/Desktop/settings-remote.yml"

Le format de sortie unifié (unified output) place le contexte environnant autour des lignes modifiées. Les lignes préfixées par - proviennent du premier fichier ; les lignes préfixées par + proviennent du second. diff est une comparaison de contenu, il ne transférera ni ne fusionnera les modifications. Pour une arborescence complète de répertoires locaux, diff -ru local-folder remote-folder compare les fichiers correspondants de manière récursive, mais le dossier distant doit être monté ou rendu accessible en tant que chemin local. Le manuel GNU Diffutils explique la comparaison récursive de répertoires et le format de sortie unifié ; les options des commandes macOS pouvant varier, consultez man diff sur votre Mac si une option est rejetée. Manuel GNU Diffutils.

Comprendre les limites avant d'agir

Une prévisualisation rsync vierge signifie qu'aucune différence n'a été détectée selon les règles de comparaison et les chemins que vous avez sélectionnés. Elle n'affiche pas d'examen côte à côte, ne résout pas les modifications conflictuelles et ne garantit pas que chaque propriété du système de fichiers est équivalente. L'option de checksum de rsync compare le contenu des fichiers, tandis que les métadonnées telles que les autorisations et les horodatages dépendent des options que vous choisissez. De plus, les arborescences de fichiers peuvent changer après la prévisualisation si quelqu'un modifie l'une des deux copies.

Si le système distant ne propose pas d'accès SSH ou rsync, cette méthode ne fonctionnera pas telle quelle. Utilisez une méthode d'accès autorisée par ce système, créez deux copies locales accessibles et comparez-les avec diff ou un autre outil de comparaison approprié. N'exécutez pas de commande de transfert à la place de la prévisualisation, à moins de vouloir explicitement son comportement de mise à jour de la source vers la destination.

Sources