Créer et appliquer un patch avec GIT

Un patch est une section de code que l’on ajoute à un logiciel pour y apporter des modifications comme un correctif par exemple.  Créer un patch sous GIT est plutôt facile, nous allons voir ici comment créer un patch à partir d’un ou d’une liste de commits pour pouvoir les appliquer dans d’autres dépôts. Par ailleurs, il est  plus intéressant de travailler avec les branches de GIT pour le développement de nouvelles fonctionnalités.

Vérifier les derniers commits

La commande git log permet d’afficher la liste des commits. Il peut arriver que cette commande soit très verbeuse. Pour afficher seulement le sha1 et le message associé à chaque commit, il faut préciser pretty=oneline. 10 listera les dix derniers commits.

git log --pretty=oneline -10

Créer un patch

Un patch créé avec git format-patch va inclure des méta-informations sur le commit en question (auteur, message, etc). Tout sera directement formaté comme un mail qui pourra être immédiatement envoyé. Le destinataire d’un patch pourra alors recréer directement le commit avec git am et appliquera également les méta-données.

En résumé, git format-patch est utile pour transférer un commit alors que git diff est utile pour juste récupérer les différences de code.

Dans le cas où l’on fait un patch pour un seul commit, il faut préciser le sha1 grâce au paramètre -1 <sha1>. On redigera directement sur la sortie standard via –stdout.

git format-patch -1 <sha1> --stdout > <name>.patch

Voir les informations contenues dans un patch

Lorsque l’on récupère un patch généré avec un git-format, on peut lire les méta-informations pour savoir ce que contient le patch. Deux options sont méritent attention :

  • stat permet de lister le diffstat sur la sortie standard.
  • check va simplement dire si le patch est applicable ou non.
git apply --stat <name>.patch
git apply --check <name>.patch

Appliquer un patch

 En se plaçant au préalable dans le bon dépôt et après avoir vérifié que le patch est applicable, il suffit de lancer la commande git am avec l’option signoff pour utiliser l’identité et le message contenu dans le patch (au lieu d’utiliser votre identité) et k pour conserver les flags ( les zones entre [ ] dans le message du commit).

git am --signoff -k < <name>.patch

Leave a Reply