J'ai un fichier avec beaucoup de lignes et je veux le refacturer, en le divisant en plusieurs fichiers. En le copiant/collant simplement, je perdrai l'historique des lignes validées et de leurs auteurs lors de l'exécution de git blame
. Existe-t-il un moyen de copier/coller ces lignes et de préserver leurs auteurs ?
Réponse
Trop de publicités?Git ne enregistre pas l'auteur (ou le valideur) d'une ligne de code spécifique.
Ce que fait Git—tout ce qu'il fait—est enregistrer un instantané complet, associé à un ensemble de métadonnées : nom de l'auteur/adresse e-mail/date, nom du validateur/adresse e-mail/date, commit parent.
Divers outils, tels que git log
, git show
, git diff
et git annotate
(ou git blame
), utilisent les données enregistrées de différentes manières. Le code de git blame
en particulier comparera chaque commit à son parent. Si certaines lignes ont été ajoutées ou modifiées dans ce commit en particulier, il attribuera l'auteur du commit à l'ensemble des lignes et rapportera le résultat.
Cela signifie qu'il est facile de demander à l'outil d'attribuer un ensemble spécifique de lignes modifiées à un auteur spécifique : faites un commit avec ce nom défini comme l'auteur.
Cela signifie également qu'il est facile de changer accidentellement toutes les lignes d'un fichier (par exemple, en changeant les caractères de terminaison de ligne de LF à CRLF ou vice versa) et "acquérir la paternité" de chaque ligne de ce fichier. Mais tout cela signifie simplement que lorsque vous utilisez git blame
, vous devez savoir comment utiliser l'outil : vous devez connaître ses limitations.
Certains—je m'inclus dans ce groupe—soutiendraient que si vous déplacez du code pour le refacturer, vous devriez "prendre possession" des lignes déplacées. L'auteur original a peut-être écrit le code original, mais pas sous cette forme. La ligne for i in expr
, par exemple, signifie quelque chose de très différent dans deux fonctions et/ou fichiers différents. Si vous déplacez un assez gros morceau, peut-être que le code garde sa "vraie signification", et... peut-être pas. Git conservera l'auteur original des lignes originales à leur place d'origine, et toute personne qui comprend git blame
ne se contentera pas de regarder le nouveau code refacturé, mais continuera à suivre le code dans l'historique pour trouver son auteur original, pré-refactorisation.
Cependant, si vous souhaitez séparer "auteur" et "valideur", Git vous offre un moyen (par commit) de le faire.