Je cherche actuellement à beaucoup de fonctionnalités de suivi du contenu de GIT. Il est très agréable de savoir que Git me permet de comprendre le code qui a été déplacé d'un fichier à un autre, mais je me demande comment cette fonctionnalité est utilisable lors de la résolution des conflits dans la fusion. P>
Voici le scénario: P>
J'ai deux fichiers Je sais que je peux comprendre manuellement, que le code a été déplacé en faisant un Quelle serait votre façon de garder cette situation aussi sûre que possible? P>
edit strong>: p>
Je viens de découvrir que edit strong>: p>
J'ai téléchargé le référentiel J'utilise pour jouer autour de Github afin que vous puissiez essayer la fusion de la fusion toi-même. Le commit où j'ai déplacé la fonction est dans la succursale. Le commit où la même fonction est modifiée en maître à la tête de la branche hello.cc code> et
bye.cc code> créé. Je lance une succursale
sujet code> et déplacez du code à partir de
hello.cc code> à
bye.cc code>. Si je fais maintenant un
git blame -c bye.cc code> Je peux voir que ce code provenait à l'origine de
hello.cc code> qui est agréable à savoir. Cependant, je passe maintenant à la branche d'origine sans le contenu déplacé et modifie du code dans la section dans
hello.cc code> qui a été déplacé dans l'autre commit. Si je fais maintenant un
git fusion de sujet code>, je reçois un conflit pour
hello.cc code>. Toutefois, sauf si j'utilise un style diff3 (que je fais de manière utilisée), je ne peux que voir que cette méthode a été supprimée de
hello.cc code> dans l'autre branche, mais pas qu'il a été modifié par la suite. Ce qui serait bien serait de créer un conflit sur
bye.cc code> car il serait nécessaire de vérifier si ces variations de l'autre branche devront être réappliquées au code. Est-ce en quelque sorte possible? P>
git blâme - extrémité de l'autre ... code>. Cependant, pour celui qui m'a pris assez de temps pour comprendre cette possibilité et la plupart des autres ne sauront probablement pas à ce sujet. Pour la seconde, je suis paresseux et oubliera probablement que le code aurait pu être déplacé. De plus, je ne suis pas sûr que cela fonctionne lorsque le code a été déplacé dans plusieurs fichiers. P>
git blame --Reverse -c hello.cc (rubrique de tête de base de git fusion) .. Topic code> fonctionne également pour savoir où le contenu déplacé. Et si je comprends bien git correctement, cela est probablement plus rapide, car il ne fera pas une recherche complète du contenu dans le référentiel complet. P>
merge_heere code>. Il y a un commit supplémentaire en maître dans lequel je jouais avec d'autres techniques de fusion, que vous devez ignorer pour cette question. P>
3 Réponses :
Vous pouvez utiliser Git pour mettre tout ce qui va de commettre cela fonctionnera bien. P>
Oui bien sûr. Je sais que ça. Mais quelle est la meilleure façon d'obtenir Git de me donner des astuces et des avertissements sur ce qu'il faut mettre dans la validation, soit par l'utilisation des outils, soit par des conflits de fusion.
Je crains que cela ne soit pas possible pour que Git reconnaisse automatiquement le code déplacé dans la fusion et la production de conflits, etc., à moins que ce ne soit des fichiers entiers renommés. p>
Il y avait déjà quelques discussions sur ce sujet ici, comme Comment git gérer le code de fusion a été déplacé vers un fichier différent? et GIT Fusionne: Appliquez les modifications apportées au code qui a été déplacé vers un fichier différent . P>
Malheureusement, je suis arrivé au même piège avec mon code, après le déménagement de fichier à Git, il ne reconnaît pas le changement lors de la fusion de branche. Il semble que la règle d'or il faut guider le travail avec le mouvement est la suivante:
Gardez le mouvement de code distinct des modifications p> BlockQuote>
Git ne peut pas suivre de tels cas, comme pour le moment. Et il semble qu'il n'ya pas de solution rapide / automatisée pour trouver des problèmes potentiels après le déplacement du fichier, puis fusionner. p>
Même si vous saurez que les deux commettrent où le problème s'est produit et essayera d'appliquer un correctif ou de revenir à des modifications perdues après le déplacement + fusionnage, vous serez toujours rejeté de GIT As-même: P> < Pré> xxx pré> p>