205 votes

Copie Git d'un fichier en conservant l'historique

J'ai une question quelque peu confuse dans Git. Disons que j'ai un fichier dir1/A.txt commis et git conserve l'historique des commits

Je dois maintenant copier le fichier dans dir2/A.txt (pas déplacer, mais copier). Je sais qu'il existe un git mv mais j'ai besoin de la commande dir2/A.txt pour avoir le même historique de commits que dir1/A.txt et dir1/A.txt d'y rester.

Je ne prévois pas de mise à jour A.txt une fois la copie créée et tous les travaux ultérieurs seront effectués sur dir2/A.txt

Je sais que cela semble confus, j'ajouterai que cette situation concerne un module basé sur java (projet mavenisé) et que nous avons besoin de créer une nouvelle version du code pour que nos clients aient la possibilité d'avoir 2 versions différentes en cours d'exécution, la première version sera supprimée à terme lorsque l'alignement sera effectué. Nous pouvons utiliser le versioning maven bien sûr, je suis juste novice en Git et curieux de savoir ce que Git peut apporter ici.

2voto

darbvin Points 21

Dans mon cas, j'ai effectué la modification sur mon disque dur (j'ai coupé/collé environ 200 dossiers/fichiers d'un chemin dans ma copie de travail vers un autre chemin dans ma copie de travail), et j'ai utilisé SourceTree (2.0.20.1) pour mettre en scène les deux modifications détectées (un ajout, une suppression), et tant que j'ai mis en scène l'ajout et la suppression ensemble, ils ont été automatiquement combinés en une seule modification avec une icône R rose (renommer, je suppose).

J'ai remarqué qu'en raison du grand nombre de modifications simultanées, SourceTree était un peu lent à détecter tous les changements, de sorte que certains de mes fichiers mis en scène ressemblent à des ajouts (vert plus) ou à des suppressions (rouge moins), mais j'ai continué à rafraîchir l'état des fichiers et à mettre en scène les nouvelles modifications au fur et à mesure qu'elles apparaissaient, et après quelques minutes, toute la liste était parfaite et prête à être validée.

J'ai vérifié que l'historique est présent, à condition que lorsque je cherche l'historique, je coche l'option "Suivre les fichiers renommés".

0voto

Ce processus préserve l'histoire, mais n'est pas très efficace :

# make branchs to new files
$: git mv arquivos && git commit

# in original branch, remove original files
$: git rm arquivos && git commit

# do merge and fix conflicts
$: git merge branch-copia-arquivos

# back to original branch and revert commit removing files
$: git revert commit

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