47 votes

Conserver l'historique git lors du fractionnement d'un fichier

Je veux retirer une fonction d'un fichier et la mettre dans un autre, mais garder l'historique des blâmes.

 cp a.php b.php

vim b.php
# delete everything but 1 function

vim a.php
# delete the 1 function

git add a.php b.php
git commit

Mais si j'exécute git blame b.php je ne le vois que blâmer ce nouveau commit.

7voto

Lukas Eder Points 48046

J'ai légèrement modifié la réponse de Peter à une autre question ici pour créer un script shell réutilisable et non interactif appelé git-split.sh :

 #!/bin/sh

if [[ $# -ne 2 ]] ; then
  echo "Usage: git-split.sh original copy"
  exit 0
fi

git mv $1 $2
git commit -n -m "Split history $1 to $2"
REV=`git rev-parse HEAD`
git reset --hard HEAD^
git mv $1 temp
git commit -n -m "Split history $1 to $2"
git merge $REV
git commit -a -n -m "Split history $1 to $2"
git mv temp $1
git commit -n -m "Split history $1 to $2"

Il copie simplement le fichier source dans un nouveau fichier, et les deux fichiers ont le même historique. Une explication pour laquelle cela fonctionne peut être vue dans cette autre réponse

6voto

Amber Points 159296

Peut-être que cette question SO précédente pourrait être informative :

Comment git track le code source déplacé entre les fichiers ?

Pour paraphraser la réponse acceptée : essentiellement, Git ne « stocke » pas réellement le code déplacé ; lors de la génération de choses comme les blâmes pour le code déplacé, cela se fait ex post facto en examinant l'état de l'ensemble du référentiel de commit à commit.

5voto

max Points 16106

essayez git blame -C -C b.php

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