Lorsque je déplace un fichier dans git en utilisant git-mv, l'état montre que le fichier a été renommé et même si je modifie certaines parties, il considère toujours que c'est presque la même chose (ce qui est bien car il me permet de suivre l'historique de celui-ci) .
Lorsque je copie un fichier, le fichier d'origine a un historique que j'aimerais associer à la nouvelle copie.
J'ai essayé de déplacer le fichier, puis d'essayer de récupérer à l'emplacement d'origine - une fois que git déplacé ne me permettra pas de récupérer l'emplacement d'origine.
J'ai essayé de faire une copie du système de fichiers, puis d'ajouter le fichier - git le répertorie en tant que nouveau fichier.
Existe-t-il un moyen de faire git enregistrer une opération de copie de fichier d'une manière similaire à la façon dont il enregistre un fichier renommer/déplacer où l'historique peut être retracé jusqu'au fichier d'origine?
Git ne renomme pas le suivi ni le suivi des copies, ce qui signifie qu'il n'enregistre pas les renommages ou les copies. Ce qu'il fait à la place, c'est renommer et copier détection. Vous pouvez demander la détection de renommage dans git diff
(et git show
) en utilisant le -M
, vous pouvez demander une détection de copie supplémentaire dans les fichiers modifiés en utilisant -C
option (-C
implique -M
), et vous pouvez demander une détection de copie plus coûteuse parmi tous les fichiers avec --find-copies-harder
ou -C -C
(ce qui implique -C
, ce qui implique -M
). Voir la page de manuel git-diff .
Vous pouvez également configurer git pour toujours faire la détection de renommage en définissant diff.renames
à une valeur booléenne vraie (par exemple true
ou 1
), et vous pouvez également demander à git de faire une détection de copie en le définissant sur copy
ou copies
. Voir la page de manuel git-config .
Vérifiez également le -l
option pour git diff
et la variable de configuration associée diff.renameLimit
.
Notez que git log <pathspec>
fonctionne différemment dans Git: ici <pathspec>
est un ensemble de délimiteurs de chemin, où chemin peut être un nom de (sous-) répertoire. Il filtre et simplifie l'historique avant que la détection de renommage et de copie n'entre en jeu. Si vous souhaitez suivre les renommages et les copies, utilisez git log --follow <filename>
(qui est actuellement un peu limité et ne fonctionne que pour un seul fichier).
Vous pouvez forcer Git à détecter l'historique du fichier copié:
(Solution tirée de https://stackoverflow.com/a/44036771/138968 .)