J'ai déplacé manuellement un tas de fichiers sans y penser, et je ne parviens pas à trouver un moyen de faire en sorte que git reconnaisse que les fichiers viennent d'être déplacés et qu'il ne s'agit pas de fichiers vraiment différents. Y a-t-il un moyen de faire cela autre que supprimer l'ancien et ajouter le nouveau (et donc perdre l'historique), ou rétablir toutes les modifications avec git-mv?
Réponses
Trop de publicités?Je pense qu'il a déjà fait cela. Maintenant, je peux me tromper, mais j'ai lu que git pistes fichiers en fonction de leur contenu pas en fonction de leur position dans le système de fichiers, ou en fonction delta/différences. Dans la pile je pense que cela montre que si les fichiers sont supprimés et la puis rajouté, mais je pense que j'ai essayé une fois et il a toujours conservé l'histoire, en raison de la manière précitée que git pistes choses.
Encore serait utile pour quelqu'un pour vérifier si je suis correct ou pas. Désolé si j'ai mal compris votre question.
git
ne pas suivre l'histoire de fichiers individuels, et il ne permet pas de traiter déplacements et copies spécialement, c'est il n'y a pas de métadonnées, qui indique que le déplacement ou la copie est produite. Au lieu de cela, chaque git commit est un instantané complet de l'arbre de travail.
Si vous souhaitez voir se déplace en git log
vous pouvez approvisionnement en -M
, en plus d'une option qui répertorie les fichiers qui ont été modifiés, par exemple
git log --summary -M
git
vais regarder les arbres voisins dans la validation de l'histoire et d'en déduire si tous les fichiers où déplacé par chaque commit.
Pour trouver des copies ainsi que renomme vous pouvez utiliser l' -C
option, vous pouvez fournir deux fois pour faire git regarder de plus près pour copie possible des sources au détriment de la performance.
git log --summary -M -C -C
Notons, que, comme git n'a pas stocker l'historique des fichiers (seulement commettre l'histoire), même si vous n' git rm
et git mv
le fichier, vous ne perdez pas toute l'histoire. Toutes les modifications sur le chemin serait encore enregistrées et visibles en git log
.
Pour mieux comprendre pourquoi Git renomme la détection au lieu du suivi de renommage explicite (plus courant), et comment fonctionne la limitation de chemin , git log
, vous pouvez lire le post de Linus sur Juno C Hamano, responsable de la Git (et références dans celui-ci).