90 votes

Git blâmé ne montrant aucune histoire

Lorsque je lance git blame sur un fichier (en utilisant msysgit), j'obtiens toujours le genre d'impression suivante :

00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200   1) package co
00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200   2) {
00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200   3)      impor
00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200   4)      impor
00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200   5)      impor
00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200   6)      impor
00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200   7)      impor

c.-à-d. qu'il montre toutes les lignes comme Non encore engagées.

J'ai essayé cela sur de nombreux fichiers, qui ont beaucoup de commits - toujours les mêmes résultats. J'ai également essayé d'utiliser le chemin relatif/complet, mais cela ne semble faire aucune différence.

Quand j'essaie d'utiliser le reproche de TortoiseGit, il montre toujours chaque ligne comme étant le dernier commit au premier commit :

alt text

même si, comme je l'ai dit, il y a en fait des dizaines de commits dans l'histoire de ces fichiers

Des idées ?

Editer - Plus d'informations

  • Le blâme de Git fonctionne bien sur GitHub, où ce repo est hébergé.
  • Il fonctionne également très bien si je le clone sur une machine linux et que j'y effectue les corrections.
  • Il semble que cela ne fonctionne pas uniquement sur msysgit.

0 votes

Pour moi, ce problème est dû à l'utilisation d'un chemin d'accès symlinké plutôt qu'un chemin d'accès reconnu par le référentiel, qui pensait donc que le fichier était complètement nouveau.

0 votes

Remarque : à partir de git 2.0.1 (25 juin 2014), git blame devrait cesser de signaler toutes ces lignes " Not Yet Committed ". Voir ma réponse ci-dessous

0 votes

Sur la liste de diffusion : git.661346.n2.nabble.com/ Cela arrive aussi sous Linux.

128voto

kusma Points 3719

git blame file.txt blâme la version de file.txt dans votre copie de travail. Si file.txt a des retours à la ligne Windows (CRLF) dans le repo et que vous avez core.autocrlf = true alors chaque ligne de file.txt sera considérée comme différente et sera signalée par git blame comme n'étant pas encore engagé.

La raison pour laquelle git blame <my_branch> (ou encore mieux git blame HEAD (qui fonctionne quelle que soit la branche sur laquelle vous vous trouvez) fonctionne, c'est qu'elle ne met pas en cause la version de la copie de travail et qu'il n'y a donc pas de risque que des lignes ne soient pas encore validées.

120 votes

git blame -w ignore les espaces blancs, de sorte que vous pouvez toujours accuser la copie de travail si vous le souhaitez.

14 votes

Git blame -w devrait être une réponse séparée et la réponse acceptée ;). La réponse acceptée sans le commentaire était inutile pour moi.

55voto

Assaf Lavie Points 20181

J'ai trouvé la solution - très bizarre.

Si j'exécute ça :

git blame file.txt

L'historique est cassé, comme indiqué ci-dessus.

Si je fais ça à la place :

git blame my_branch file.txt

Ça marche !

C'est très bizarre, car AFAICS l'utilisation ne nécessite pas de nom de branche :

$ git blame
usage: git blame [options] [rev-opts] [rev] [--] file

7 votes

Cela fonctionne pour moi, merci de le poster. Vous devriez marquer celui-ci comme la réponse IMO.

0 votes

Cela fonctionne pour moi dans msysgit mais le nom du fichier est sensible à la casse. Je peux donc écrire git blame mybranch cmakelists.txt et il échouera ; mais si j'écris git blame mybranch CMakeLists.txt ça va marcher.

0 votes

Je suis d'accord, wes ; blame ne montrait aucun historique jusqu'à ce que je spécifie la branche, et c'est incompatible avec la documentation.

8voto

VonC Points 414372

À partir de git 2.0.1 (25 juin 2014), git blame devrait cesser de signaler toutes ces lignes " Not Yet Committed ".

Voir commit 4d4813a (26 avril 2014) par brian m. carlson ( bk2204 ) .
(fusionné par Junio C Hamano -- gitster -- en commettre e934c67 , 06 Jun 2014)

blame : traiter correctement les fichiers indépendamment de autocrlf

Si un fichier contient CRLF les terminaisons de ligne dans un référentiel avec core.autocrlf=input alors la faute a toujours marqué les lignes comme " Not Committed Yet ", même s'ils n'ont pas été modifiés.
N'essayez pas de convertir les fins de ligne lors de la création du faux commit afin que le blâme fonctionne correctement indépendamment de l'option autocrlf réglage.

9 votes

J'ai toujours le problème dans git v2.1.3

0 votes

J'ai le problème avec la version 2.16.1.Windows.1 de git.

0 votes

@Radon8472 Pouvez-vous ajouter une nouvelle question illustrant le problème, avec vos coordonnées. git config -l (et un lien vers cette réponse) : cela nous permettra, à moi et à d'autres, d'essayer de voir si le problème persiste.

1voto

John Jacecko Points 589

Une autre possibilité : une erreur de frappe dans le nom du fichier en fonction de la casse.

J'ai eu le même problème avec git blame file.txt, puis j'ai réalisé que j'avais fait une faute de frappe sur le nom de fichier en respectant la casse avec file.txt.

Je l'ai changé en File.txt (par exemple), et j'ai obtenu les résultats attendus sans avoir à spécifier ma branche : git blame File.txt

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