web-dev-qa-db-fra.com

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

Je ne vois pas de différence entre la sortie de 'git format-patch' et 'git diff', y en a-t-il? Et ne pourrai-je pas utiliser 'git diff' pour produire un patch et ensuite l'appliquer en utilisant 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
85
Rafid

Un patch créé avec git format-patch inclura également des méta-informations sur le commit (committer, date, message de commit, ...) et contiendra diff de données binaires. Tout sera formaté sous forme de mail, afin de pouvoir être facilement envoyé. La personne qui le reçoit peut alors recréer le commit correspondant avec git am et toutes les métadonnées seront intactes. Il peut également être appliqué avec git apply car il s'agit d'un super-ensemble d'un simple diff.

Un patch créé avec git diff sera un simple diff avec le contexte (pensez diff -u). Il peut également être appliqué avec git apply mais les métadonnées ne seront pas recréées (car 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 un diff entre deux arbres.

121
Sylvain Defresne

À partir des manuels git-format-patch prépare les correctifs appropriés pour la soumission par e-mail, tandis que git-diff montre les changements.

Ce sont deux choses différentes et ont des objectifs différents, elles arrivent juste à produire un format de patch. Mais git-format-patch ajoute des données sur une validation (date, auteur, message de validation) et les regroupe dans un format qui convient à l'envoi en tant que message électronique Unix (bien que ce ne soient que des fichiers, afin qu'elles puissent être envoyées à d'autres méthodes et toujours appliquées) par git-am).

Également git-format-patch génère un fichier correctif pour chaque commit dans la plage que vous spécifiez. Ces modifications seront ajoutées lors de la validation de votre référentiel avec git-am.

git-diff montre simplement la différence entre les deux états que vous demandez, et peut être utilisé pour créer un fichier patch. Mais ce n'est qu'un fichier de correctif normal et l'application du correctif 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.

9
Abizern