Il est possible de renommer un fichier et de conserver l'historique intact, bien qu'il provoque le fichier sera renommé au long de toute l'histoire du référentiel. C'est probablement seulement pour le trouble obsessionnel git log-amateurs, et a de graves conséquences, y compris celles-ci:
- Vous pourriez être réécriture d'une histoire commune, qui est le plus important N'est PAS tout, l'utilisation de Git. Si quelqu'un d'autre a cloné le dépôt, vous aurez briser cela. Ils auront à re-cloner afin d'éviter les maux de tête. Cela peut être OK, si le changement de nom est assez important, mais vous aurez besoin d'examiner attentivement -- vous pourriez finir par bouleverser toute une communauté opensource!
- Si vous avez référencé le fichier à l'aide de son ancien nom plus tôt dans le référentiel de l'histoire, vous êtes effectivement de casser les versions antérieures. Pour remédier à cela, vous aurez à faire un peu plus hoop de sauter. Il n'est pas impossible, juste fastidieux et peut-être pas la peine.
Maintenant, puisque vous êtes toujours avec moi, vous êtes probablement en solo développeur de renommer un complètement isolé de fichier. Nous allons passer d'un fichier à l'aide d' filter-tree
!
Supposons que vous allez déplacer un fichier old
dans un dossier dir
et donnez-lui le nom new
Cela pourrait être fait avec git mv old dir/new && git add -u dir/new
, mais qui casse de l'histoire.
Au lieu de cela..
git filter-branch --tree-filter 'if [ -f old ]; then mkdir dir && mv old dir/new; fi' HEAD
va refaire chaque commit de la branche, l'exécution de la commande dans le tiques pour chaque itération. Beaucoup de choses peuvent aller mal lorsque vous faites cela. J'ai l'habitude de tester pour voir si le fichier est présent (sinon, il n'y pas encore de déplacer) et ensuite effectuer les démarches nécessaires au chausse-pied de l'arbre à mon goût. Ici vous pouvez sed par le biais de fichiers à modifier les références au fichier et ainsi de suite. Faites-vous plaisir! :)
Une fois terminé, le fichier est déplacé et le journal est intact. Vous vous sentez comme un ninja pirate.
Aussi; La mkdir dir n'est nécessaire que si vous déplacez le fichier dans un nouveau dossier, bien sûr. Le si va éviter la création de ce dossier plus tôt dans l'histoire que votre fichier existe.