Avertissement sur «variable diff.renamelimit» lors de l’exécution de git push

Je pousse le commit local vers le serveur git distant et reçois les messages d’avertissement suivants:

remote: warning: only found copies from modified paths due to too many files. remote: warning: you may want to set your diff.renamelimit variable to at least 19824 and retry the command. 

Mais en fait, j’ai déjà défini le diff.renamelimit sur 0 (je pense que zéro signifie illimité, non?).

 $ git config --list ... diff.renamelimit=0 

Alors, que dois-je faire pour éviter cet avertissement? Merci.

La documentation ne mentionne pas 0 comme valeur spéciale pour diff.renamelimit .
Donc, vous devriez définir cette limite à la valeur recommandée.
Ou vous pouvez essayer de désactiver la détection de renommage. ( git config diff.renames 0 )

Vous trouverez un exemple similaire dans cet article ” Confluence, git, rename, merge oh my … “:

Comme déjà mentionné, git essaie de détecter les noms de fichiers après cela, par exemple en utilisant git log ou git diff/merge .
Lorsque vous tentez de détecter les noms, git fait la distinction entre les noms exacts et inexacts, le premier étant un renommage sans modifier le contenu du fichier et le second un changement de contenu (par exemple, renommer / déplacer une classe Java).
Cette distinction est importante car l’algorithme de détection de renommage exact est linéaire et sera toujours exécuté alors que l’algorithme de détection de renommage inexact est quadratique ( O(n^2) ) et git ne le fait pas si le nombre de fichiers modifiés dépasse un certain seuil (1000 par défaut).

Comme le nombre de fichiers affectés par la récente réorganisation dépasse ce seuil, git abandonne simplement et laisse la résolution de fusion au développeur. Dans notre cas, nous pouvons éviter de faire une résolution de fusion manuelle en modifiant le seuil


Note: Git 2.16 (T1 2018) modifiera cette limite:

Historiquement, le mécanisme diff pour la détection de renommage avait une limite de 32k chemins codés en dur; Cela est en train d’être levé pour permettre aux utilisateurs de faire des cycles avec un résultat (éventuellement) plus facile à lire.

Voir commit 8997355 (29 nov. 2017) par Jonathan Tan ( jhowtan ) .
Voir commit 9268cf4 , commit 9f7e4bf , commit d6861d0 , commit b520abf (13 nov. 2017) par Elijah Newren ( newren ) .
(Fusionné par Junio ​​C Hamano – gitster – dans commit 6466854 , 19 décembre 2017)

diff : supprimer la pince silencieuse de renameLimit

Dans commit 0024a54 (Correction de la vérification de la limite de détection de renommage, septembre 2007, Git v1.5.3.2), renameLimit été bloqué sur 32767.
Cela semble avoir été simplement d’éviter le débordement d’entier dans le calcul suivant:

 num_create * num_src <= rename_limit * rename_limit 

Bien que cela puisse également être vu comme une limite codée en dur sur la quantité de temps CPU que nous sums prêts à autoriser les utilisateurs à dire à git de dépenser pour gérer les renoms.
Une limite supérieure peut avoir un sens, mais malheureusement cette limite supérieure n'a été communiquée ni aux utilisateurs, ni documentée.

Bien que les grandes limites puissent ralentir les choses, les utilisateurs qui seraient ravis d’avoir une petite modification de cinq fichiers seront correctement sélectionnés, même s’ils doivent spécifier manuellement une grande limite et attendre dix minutes pour que les noms soient détectés.

Les scripts et outils existants qui utilisent " -l0 " pour continuer à travailler, en traitant 0 comme une valeur spéciale indiquant que la limite de renommage doit être un très grand nombre.


Git 2.17 (Q2 2018) évitera d'afficher un message d'avertissement au milieu d'une ligne de sortie " git diff ".

Voir commit 4e056c9 (16 janvier 2018) de Nguyễn Thái Ngọc Duy ( pclouds ) .
(Fusionné par Junio ​​C Hamano - gitster - dans commit 17c8e0b , 13 février 2018)

diff.c : flush stdout avant l'impression renomme les avertissements

La sortie diff est mise en mémoire tampon dans un object FILE et peut toujours être partiellement mise en mémoire tampon lorsque nous imprimons ces avertissements (directement dans fd 2 ).
La sortie est foiré comme ça

  worktree.c | 138 +- worktree.h warning: inexact rename detection was skipped due to too many files. | 12 +- wrapper.c | 83 +- 

Cela devient pire si l'avertissement est imprimé après que les codes de couleur pour la partie graphique ont déjà été imprimés. Vous recevrez un avertissement en vert ou en rouge.

Rincez stdout en premier, pour que nous puissions obtenir quelque chose comme ça:

  xdiff/xutils.c | 42 +- xdiff/xutils.h | 4 +- 1033 files changed, 150824 insertions(+), 69395 deletions(-) warning: inexact rename detection was skipped due to too many files. 
 git config merge.renameLimit 999999 

Que signifie merge.renameLimit

Nombre de fichiers à prendre en compte lors de la détection de renommage lors d’une fusion; si non spécifié, la valeur par défaut est diff.renameLimit .

source: https://git-scm.com/docs/git-merge