5 votes

Dans le contexte de git (et de diff), qu'est-ce qu'un "hunk" ?

Je cherchais une définition de "hunk" en lisant la documentation de git.

Je sais qu'il s'agit d'une description de la différence entre deux fichiers et qu'il a un format bien défini, mais je n'ai pas trouvé de définition succincte.

J'ai essayé de faire une recherche sur Google, mais j'ai trouvé beaucoup de résultats erronés.

4voto

anon Points 21

Et j'ai fini par trouver ceci :

Lorsqu'il compare deux fichiers, diff trouve des séquences de lignes communes aux deux fichiers, entrecoupées de groupes de lignes différentes appelés "hunks".

ici : http://www.gnu.org/software/diffutils/manual/html_node/Hunks.html

C'est exactement le type de définition succincte que je recherchais. J'espère que cela aidera quelqu'un d'autre !

3voto

VonC Points 414372

Le terme "hunk" n'est en effet pas spécifique à Git, et vient de l'anglais "hunk". Format Gnu diffutil . Plus succinctement encore :

Chaque morceau montre un domaine dans lequel les dossiers diffèrent.

Mais le défi pour Git est de déterminer la bonne façon de procéder. limites pour un gros morceau.

Le reste de la réponse permet d'illustrer ce à quoi ressemble un hunk dans Git :

Après diverses heuristiques (comme le compactage un qui a disparu dans Git 2.12), les responsables de Git ont opté pour l'indentation, qui a été introduite dans Sept. 2016 avec Git 2.11, commit 433860f .

Certains groupes d'ajouts/suppressions parce que les lignes en bordure du groupe ne sont pas uniques.
Le choix de bonnes équipes pour de tels groupes n'est pas une question de correction, mais a certainement un effet important sur l'esthétique. .
Par exemple, considérons les deux différences suivantes.
La première concerne les émissions de la norme Git :

--- a/9c572b21dd090a1e5c5bb397053bf8043ffe7fb4:git-send-email.perl
+++ b/6dcfa306f2b67b733a7eb2d7ded1bc9987809edb:git-send-email.perl
@@ -231,6 +231,9 @@ if (!defined $initial_reply_to && $prompting) {
 }

 if (!$smtp_server) {
+       $smtp_server = $repo->config('sendemail.smtpserver');
+}
+if (!$smtp_server) {
        foreach (qw( /usr/sbin/sendmail /usr/lib/sendmail )) {
                if (-x $_) {
                        $smtp_server = $_;

La diff suivante est équivalente, mais elle est o d'un point de vue esthétique :

--- a/9c572b21dd090a1e5c5bb397053bf8043ffe7fb4:git-send-email.perl
+++ b/6dcfa306f2b67b733a7eb2d7ded1bc9987809edb:git-send-email.perl
@@ -230,6 +230,9 @@ if (!defined $initial_reply_to && $prompting) {
        $initial_reply_to =~ s/(^\s+|\s+$)//g;
 }

+if (!$smtp_server) {
+       $smtp_server = $repo->config('sendemail.smtpserver');
+}
 if (!$smtp_server) {
        foreach (qw( /usr/sbin/sendmail /usr/lib/sendmail )) {
                if (-x $_) {

Ce patch apprend à Git à choisir de meilleures positions pour ces "curseurs de diff" en utilisant une heuristique qui prend la position des lignes vierges proches a l'indentation des lignes voisines .


Avec Git 2.14 (Q3 2017), cette heuristique d'indentation sera la valeur par défaut !

Véase commit 1fa8a66 (08 mai 2017) par Jeff King ( peff ) .
Voir commit 33de716 (08 mai 2017) par Stefan Beller ( stefanbeller ) .
Voir commit 37590ce , commit cf5e772 (08 mai 2017) par Marc Branchaud.
(fusionné par Junio C Hamano -- gitster -- en commit 53083f8 , 05 Jun 2017)

diff : activation de l'heuristique d'indentation par défaut

La fonctionnalité a été incluse dans la v2.11 (sortie le 2016-11-29) et nous n'avons reçu aucun négatif. Bien au contraire, tous les retours que nous avons eus étaient positifs.

L'activer par défaut. Les utilisateurs qui n'aiment pas cette fonction peuvent la désactiver. en paramétrant diff.indentHeuristic .

1voto

Aparna Points 280

Pour votre information, vous pouvez également lire cette explication simple : https://mvtechjourney.wordpress.com/2014/08/01/git-stage-hunk-and-discard-hunk-sourcetree/

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