GNU/Linux >> Tutoriels Linux >  >> Linux

Collaborer sur un fichier en utilisant Linux diff et patch

J'édite beaucoup de fichiers texte. Parfois, c'est du code. D'autres fois, c'est le mot écrit pour les jeux de rôle (RPG), les livres de programmation ou la correspondance générale. Parfois, c'est bien de faire un changement, mais pour mon collaborateur de comparer mon changement avec ce qu'il avait écrit à l'origine. De nombreuses personnes utilisent par défaut des suites bureautiques, comme LibreOffice, en utilisant des commentaires ou des fonctionnalités de suivi des modifications. Parfois, un outil plus simple a plus de sens, et pour cela, vous pouvez consulter l'historique de programmation pour des outils tels que diff et patch , qui fournissent une mise en forme standardisée pour le suivi et l'application des modifications aux fichiers partagés.

Plus de ressources Linux

  • Aide-mémoire des commandes Linux
  • Aide-mémoire des commandes Linux avancées
  • Cours en ligne gratuit :Présentation technique de RHEL
  • Aide-mémoire sur le réseau Linux
  • Aide-mémoire SELinux
  • Aide-mémoire sur les commandes courantes de Linux
  • Que sont les conteneurs Linux ?
  • Nos derniers articles Linux

Même avec un simple fichier, il est complexe de synchroniser deux documents. Certains éléments sont modifiés, d'autres sont laissés seuls, du nouveau contenu est ajouté et certains restent les mêmes mais sont déplacés à différents endroits du document. Il est difficile de répliquer les modifications sans accepter avec béatitude que toutes les modifications soient également valides et de remplacer l'ancien fichier par le nouveau. Il est également monolithiquement opaque. Il y a tellement de changements qu'il est difficile de déterminer exactement ce qui a changé.

Avec le diff commande, vous pouvez créer un enregistrement de la façon dont le fichier a changé, et avec patch vous pouvez "rejouer" ces modifications sur l'ancienne version pour la mettre à jour avec la nouvelle version.

Configuration

Supposons que vous et moi collaborions sur un fichier décrivant comment préparer une tasse de thé.



Jusqu'à présent, le fichier tea.md contient un copier-coller brut :

Boil water.
Warm the teapot.
Add tea and water to the teapot.
Place a tea cosy over the teapot.
Steep for 6 minutes.
Pour tea into cup.
Add milk.

Cela semble raisonnable, mais il y a toujours des optimisations que vous pouvez faire, alors vous m'envoyez le fichier pour amélioration. Dans un effort pour clarifier le processus de fabrication du thé, je copie le fichier sous tea-revision.md et éditez-le, vous obtenez ceci :

Warm a teapot in the proving drawer of your oven.
Boil water.
Add tea leaves to a tea strainer.
Add strainer and water to teapot.
Steep for 6 minutes. Keep it warm with a tea cosy.
Pour tea into cup.
Optionally, add warm milk.

Comme prévu, certains éléments (Boil water et Pour tea into cup ) sont inchangées, tandis que les autres lignes (Warm the teapot ) ont eu des ajouts. Certaines lignes sont complètement nouvelles, et certaines lignes sont identiques mais dans un ordre différent.

Créer une différence

Le diff outil affiche la différence entre deux fichiers. Il existe plusieurs façons d'afficher les résultats, mais je pense que la plus claire est le --unified (-u pour faire court), qui montre quelles lignes ont été ajoutées ou soustraites. Une ligne modifiée de quelque manière que ce soit est traitée comme une ligne qui a été soustraite puis ajoutée. Par défaut, diff imprime sa sortie sur le terminal.

Indiquez diff avec l'ancien fichier puis le nouveau fichier :

$ diff --unified tea.md tea-revised.md 
--- tea.md      2021-11-13 10:26:25.082110219 +1300
+++ tea-revised.md      2021-11-13 10:26:32.049110664 +1300
@@ -1,7 +1,7 @@
+Warm a teapot in the proving drawer of your oven.
 Boil water.
-Warm the teapot.
-Add tea and water to the teapot.
-Place a tea cosy over the teapot.
-Steep for 6 minutes.
+Add tea leaves to a tea strainer.
+Add strainer and water to teapot.
+Steep for 6 minutes. Keep it warm with a tea cosy.
 Pour tea into cup.
-Add milk.
+Optionally, add warm milk.

Un signe plus (+ ) au début d'une ligne indique quelque chose qui a été ajouté à l'ancien fichier. Un signe moins (- ) au début d'une ligne indique une ligne qui a été supprimée ou modifiée.

Créer un patch avec diff

Un fichier de correctif n'est que la sortie du diff --unified commande placée dans un fichier. Vous pouvez le faire en utilisant la redirection Bash standard :

$ diff -u tea.md tea-revised.md > tea.patch

Le contenu du fichier est exactement le même que celui qui a été envoyé au terminal. J'aime voir les fichiers de correctifs dans Emacs, qui attribue un code couleur à chaque ligne selon qu'elle a été ajoutée ou soustraite.

Appliquer les modifications avec le correctif

Une fois que j'ai un fichier de correctif, je peux vous l'envoyer pour que vous le révisiez et, éventuellement, que vous l'appliquiez à votre ancien fichier. Vous appliquez un patch avec le patch commande :

$ patch tea.md tea.patch

Des lignes se sont ajoutées, des lignes se sont soustraites, et au final, vous vous retrouvez avec un fichier identique à ma version :

$ cat tea.md
Warm a teapot in the proving drawer of your oven.
Boil water.
Add tea leaves to a tea strainer.
Add strainer and water to teapot.
Steep for 6 minutes. Keep it warm with a tea cosy.
Pour tea into cup.
Optionally, add warm milk.

Il n'y a pas de limite au nombre de fois que vous pouvez patcher un fichier. Vous pouvez itérer sur mes modifications, générer un nouveau correctif et me l'envoyer pour examen. L'envoi de modifications plutôt que de résultats permet à chaque contributeur d'examiner ce qui a changé, de décider ce qu'il souhaite conserver ou éliminer et de documenter avec précision le processus.

Installer

Sous Linux et macOS, vous avez déjà à la fois le diff et patch commandes. Sous Windows, vous pouvez obtenir diff et patch via Cygwin, ou utilisez Chocolatey pour rechercher des diffutils et des correctifs.

Si vous avez déjà essayé de collaborer sur des fichiers par e-mail ou chat, et que vous vous êtes retrouvé à essayer de décrire où vous avez besoin d'un changement, alors vous allez adorer diff et patch . Un fichier soigneusement structuré, tel qu'un code ou un Markdown délimité par des lignes, est facile à différencier, à corriger et à entretenir.


Linux
  1. Comment chiffrer et déchiffrer des fichiers/dossiers sous Linux à l'aide de GnuPG

  2. Comment chiffrer et déchiffrer un fichier à l'aide de GnuPG sous Linux

  3. 7 exemples de commandes de patch pour appliquer des fichiers de patch Diff sous Linux

  4. Comment compresser et décompresser des fichiers .bz2 sous Linux à l'aide de la commande bzip2

  5. Diff/correctif binaire pour les fichiers volumineux sous Linux ?

Comment utiliser la commande Linux diff

Comment enregistrer et rejouer des sessions de terminal Linux à l'aide des commandes "script" et "scriptreplay"

Tout sur les fichiers tar et comment tar, décompresser des fichiers sous Linux à l'aide du terminal

Comment effacer en toute sécurité un disque et un fichier à l'aide de la commande Linux shred

Comment masquer des dossiers et des fichiers sous Linux à l'aide d'un fichier texte

Comparez deux fichiers sous Linux - Utilisation de diff, vimdiff et colordiff