Dans la documentation de git diff-format, il est dit ce qui suit concernant les modifications sur place :

La lettre d'état M peut être suivie d'un score (indiquant le pourcentage de dissemblance) pour les réécritures de fichiers.

Mais aucun exemple de ce qui est dit n'est fourni.

Que sont les réécritures de fichiers et en quoi sont-elles différentes des modifications de fichiers ?

Pouvez-vous fournir un exemple d'un diff renvoyant une entrée pour une réécriture de fichier avec un certain pourcentage de dissemblance, comme

:100644 100644 5be4a4a fabadb8 M050 file.c

M050 signifie une dissemblance de 50 % ?

Merci

git
1
mljrg 14 oct. 2020 à 13:44

1 réponse

Meilleure réponse

Suivons le cas de test git rewrite pour obtenir un % de dissemblance.

  1. Téléchargez l'exemple de contenu depuis git,
    wget -O test https://raw.githubusercontent.com/git/git/master/COPYING
  2. git add test; git commit -m"initial commit"
  3. Remplacer quelques contenus du fichier,
head -230 test | tr "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" "nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM" > test.tmp
tail -130 test >> test.tmp
cat test.tmp > test
  1. git diff -B --raw test
:100644 100644 536e555 0000000 M063     test
  1. Lors de la validation, le fichier sera marqué comme réécriture.
git add test
git commit -m"commit 60percent"
[master 59c06d0] commit 60percent
 1 file changed, 360 insertions(+), 360 deletions(-)
 rewrite test (63%)

Selon l'option -B de git diff , si plus de 40 % du fichier n'est pas modifié, cela ne sera pas considéré comme une réécriture. Vous devez passer des paramètres à git diff pour obtenir 50% de dissemblance.

git reset --hard HEAD~1
head -186 test | tr "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" "nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM" > test.tmp
tail -174 test >> test.tmp
cat test.tmp > test
git diff --raw -B/50
:100644 100644 536e555 0000000 M050     test

Cependant, lors de la validation du fichier, il ne sera pas considéré comme une réécriture

git add test
git commit -m"commit 50percent"
[master 89aa4a6] commit 50percent
 1 file changed, 177 insertions(+), 177 deletions(-)
3
mljrg 14 oct. 2020 à 16:11