web-dev-qa-db-fra.com

Pourquoi git log n'affiche-t-il pas l'historique d'un fichier déplacé, et que puis-je faire à ce sujet?

J'ai renommé quelques fichiers à l'aide de git mv, utilisé git stash, a jeté un rapide coup d'œil à HEAD (sans le changer) puis git stash pop pour récupérer le tout. Mes mouvements avaient disparu de la liste de validation, je les ai donc refaits avec git rm et le message de validation affirmait que git avait repéré que le changement de nom était un changement de nom. Alors je n'y ai plus pensé.

Mais maintenant, après la validation, je ne peux pas accéder à l'historique des fichiers déplacés! Voici ce que git dit sur le commit en question:

~/projects% git log --summary
commit de6e9fa2179ae17ec35a5c368d246f19da27f93a
Author: brone
Date:   Wed Dec 8 22:37:54 2010 +0000

    Moved R_DebugUI into runtime

 delete mode 100644 test/R_DebugUI_iOS.h
 delete mode 100644 test/R_DebugUI_iOS.m
 create mode 100644 system/runtime/src/R_DebugUI_iOS.h
 create mode 100644 system/runtime/src/R_DebugUI_iOS.m

 <<snip older commits>>
 ~/projects%

J'essaie maintenant d'obtenir l'historique de l'un de ces fichiers déplacés, donc je peux regarder une ancienne version, mais je n'ai rien de très utile:

~/projects/system/runtime/src% git log --follow --find-copies-harder -M -C R_DebugUI_iOS.m
commit de6e9fa2179ae17ec35a5c368d246f19da27f93a
Author: brone
Date:   Wed Dec 8 22:37:54 2010 +0000

    Moved R_DebugUI into runtime
~/projects/system/runtime/src% 

(Je l'ai également essayé sans -M, -C et --find-copies-harder, mais en vain.)

Je peux obtenir son historique sous son ancien nom, qui s'arrête au point où il a été supprimé de son ancien emplacement:

~/projects% git log --summary --follow --find-copies-harder -M -C -- test/R_DebugUI_iOS.m
commit de6e9fa2179ae17ec35a5c368d246f19da27f93a
Author: brone
Date:   Wed Dec 8 22:37:54 2010 +0000

    Moved R_DebugUI into runtime

 delete mode 100644 test/R_DebugUI_iOS.m

commit 32a22d53c27e260714f759ecb3d3864e38b2e87f
Author: brone
Date:   Tue Dec 7 23:52:51 2010 +0000

    Can set debug UI's alpha.

<<snip older commits>>
~/projects%

Je ne suis donc pas complètement coincé cette fois, mais je n'aurais pas envie de devoir faire ce genre de choses tout le temps. (Je prévois avoir un bon nombre de fichiers qui se déplaceront au moins une fois dans leur vie.)

Est-ce que je fais quelque chose de mal? L'ancienne copie du fichier et la nouvelle copie sont identiques à 98,8% (2 lignes sur 166 modifiées). Ma compréhension est que git devrait être capable de suivre le fichier dans ce cas, car il déduit les opérations de renommage plutôt que de les stocker explicitement, et les fichiers sont suffisamment similaires pour que je pense qu'il devrait les considérer comme les mêmes.

Puis-je faire quelque chose pour résoudre ce problème?

79
please delete me

Répondre à ma propre question, car j'ai réussi à apaiser mes inquiétudes, même si je n'ai pas résolu mon problème exactement. (git log --follow ne fonctionne toujours pas pour moi.)

Tout d'abord, le --summary le journal du commit renommé inclut la ligne delete avec l'ancien nom du fichier. Donc, si c'est facile à repérer, vous pouvez trouver son ancien nom et git log De là.

Si cela fait partie d'un gros commit, et donc un peu plus difficile à repérer - et cette situation était l'un de mes soucis - git blame -C peut être utilisé avec le nouveau nom du fichier lors de la première révision post-renommage. Vraisemblablement, les lignes restent du fichier d'origine! - donc git devrait trouver leur source, et montrer l'ancien nom de fichier (et un hachage de validation pour faire bonne mesure). Vous pouvez ensuite reprendre la piste avec git log.

Donc, si vous vous intéressez à l'historique du fichier en tant qu'unité (pour une raison quelconque), il semble que cela puisse être fait de manière relativement simple. Bien que j'aie l'impression que Git préférerait que vous l'utilisiez correctement.

14
please delete me

Veuillez essayer avec git log --follow dans votre fichier. J'apprends d'ici Est-il possible de déplacer/renommer des fichiers dans git et de conserver leur historique?

103
liang

Eh bien, je vois mes noms avec git log -M --summary ..

25
user502515
git log --follow ./path/to/file

Je crois que c'est ce que vous recherchez.

7
janetkuo