2012-10-21 5 views
3

Git ne suit pas renommemise à jour git index mv

j'avais un fichier dir1/some.class. Je l'ai copié comme dir2/some.class et commited + poussé. Quelques semaines plus tard, j'ai supprimé la version dir1. Puis-je enseigner à git d'agir comme s'il s'agissait d'un mouvement plutôt que d'un nouveau fichier?
Donc tous les changements à dir1/some.class que je fusionnerai d'autres branches fusionneront réellement en dir2/some.class?

J'ai essayé avec

git checkout mybranch 
git config merge.renameLimit 100 
git merge --no-ff -X rename-threshold=80 master 
git config --unset merge.renameLimit 

certains des fichiers ont été fusionnés. Mais certains ne le font pas. Surtout ce qui me manque, c'est une capacité de journalisation git, pour voir les changements à dir2/class ont été lancés au passé comme dir1/class, mais cela n'arrive pas.

enter image description here

Ce qui m'a aidé était actualy

Seuil bas de changement de nom (10% de similarité de considérer un fichier renommé)
Grande merge.renameLimit (consomme beaucoup de RAM lors de la fusion)

git checkout mybranch 
git config merge.renameLimit 999999 
git merge --no-ff -X rename-threshold=10 -Xignore-space-change master 
git config --unset merge.renameLimit 

Consultez également la réponse ci-dessous.

Répondre

2

Je voudrais essayer ceci: dans la branche que vous fusionnez, renommer dir1 en dir2 (vous pouvez le faire sur une nouvelle branche temporaire si vous le souhaitez). Puis fusionnez cela dans votre branche principale.

+0

Excellente suggestion. Je vais certainement essayer. Dommage, il y a beaucoup de renom dans le projet et ils ne sont pas si directs pour utiliser un script de renommage. Bien que j'ai peur de le renommer sur une nouvelle branche me ramènera à la même situation quand je vais essayer de fusionner tous les changements à master;) – Alex

+0

C'est probablement la bonne réponse, donc je vais le marquer comme correct, mais ce qui a aidé moi diminue le rename-threshold et augmente le renameLimit parce que j'ai eu beaucoup de renommer après refactoring, sans structure concrète. – Alex