112 votes

Quelle est la différence entre "git format-patch" et "git diff" ?

Je ne vois pas de différence entre les résultats de "git format-patch" et "git diff", y en a-t-il une ? Et ne pourrai-je pas utiliser 'git diff' pour produire un patch et l'appliquer ensuite avec git apply ?

Mon problème est que j'ai des changements ajoutés à l'index, mais apparemment git format-patch n'accepte que les commits, donc si je peux utiliser la sortie de diff, alors je peux utiliser cette commande pour produire un patch pour les changements dans l'index :

git diff --cached > index.patch

144voto

Sylvain Defresne Points 15231

Un patch créé avec git format-patch comprendra également des méta-informations sur le commit (commiteur, date, message de commit, ...) et contiendra le diff des données binaires. Le tout sera formaté comme un mail, afin qu'il puisse être facilement envoyé. La personne qui le reçoit peut alors recréer le commit correspondant avec git am et toutes les méta-données seront intactes. Il peut également être appliqué avec git apply car c'est un super-ensemble d'un diff simple.

Un patch créé avec git diff sera une simple différence avec le contexte (pensez à diff -u ). Il peut également être appliqué avec git apply mais les méta-données ne seront pas recréées (puisqu'elles ne sont pas présentes).

En résumé, git format-patch est utile pour transmettre un commit, tandis que git diff est utile pour obtenir la différence entre deux arbres.

19voto

Abizern Points 52378

Extrait des manuels git-format-patch prépare des patchs adaptés à la soumission par e-mail, tandis que git-diff montre des changements.

Ce sont deux choses différentes et ont des objectifs différents, il se trouve juste qu'ils produisent un format de patch. Mais git-format-patch ajoute des données à propos d'un commit (date, auteur, message de commit) et les regroupe dans un format adapté à l'envoi d'un message mail Unix (bien que ce ne soient que des fichiers, donc ils peuvent être envoyés à d'autres méthodes et toujours appliqués par git-am).

También git-format-patch génère un fichier patch pour chaque commit dans la plage que vous spécifiez. Ces changements seront ajoutés en tant que commits à votre dépôt avec l'option git-am .

git-diff montre juste la différence entre les deux états que vous demandez, et peut être utilisé pour créer un fichier patch. Mais il s'agit juste d'un fichier patch normal et l'application du patch ne fera que changer l'état du répertoire de travail.

Et oui, vous pouvez créer un patch pour votre index de cette façon.

0 votes

Merci. Quelle est la particularité de la messagerie UNIX pour qu'ils aient conçu le correctif en fonction de celle-ci ?

7 votes

Il n'y a rien de vraiment spécial. C'est juste que git a été conçu par Linus Torvalds dont le flux de travail impliquait l'envoi et la réception de correctifs par courrier électronique pour validation avant intégration dans le noyau Linux.

1 votes

Git était conçu par Linus Torvalds pour avoir gardé le noyau Linux. Le courrier Unix était un format commun.

6voto

K. Symbol Points 71

Le fichier de correction peut être généré avec la commande git diff mais en comparant avec le patch généré par la commande git format-patch commande, les principales différences sont :

  1. Pas de métadonnées sur un commit (comme la date, l'auteur, le message de commit, etc.) ;
  2. Pas de statistiques sur le diff (diffstat, comme x fichiers modifiés, y insertions(+), z suppressions(-)) ;
  3. Pas de différences binaires, seulement des différences textuelles.

enter image description here

Pour générer le fichier patch pour tous les fichiers modifiés (dans l'index ou le répertoire de travail) :

git diff HEAD --binary > my.patch
# git diff + git diff --cached/staged == git diff HEAD

Pour appliquer le fichier patch généré :

# restore the changed files firstly
git restore --staged .
git restore .

# apply the patch to redo the changes 
git apply my.patch
# or
patch -p1 < my.patch

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X