Au moment où je suis prêt à fusionner ma branche dans développer (emphase le mien)
Le traitement des conflits dans git merge
est souvent plus simple que dans git rebase
. Dans la fusion Git, vous pouvez voir la liste complète des fichiers qui ont été modifiés en même temps. Peu importe le nombre de commits effectués par d'autres collègues, vous devrez fusionner une fois . Avec le flux de travail ReBase, vous pouvez finir par avoir les mêmes conflits encore et encore et devoir les examiner manuellement. Vous pouvez finir par réparer le 13ème commit et avoir l’impression que vous ne pouvez pas voir la lumière du tunnel .
D'après mon expérience, lorsque j'ai tenté de résoudre naïvement des conflits de rebase répétés, j'ai fini par perdre les modifications de quelqu'un ou par une application qui ne compilait même pas. Souvent, mes collègues et moi-même travaillions beaucoup, mais nous étions tellement submergés par la complexité de la répétition de conflits que nous avons dû abandonner et perdre notre travail précédent après une poignée d'engagements de réassurance.
Je vais vous suggérer quelques techniques, mais elles ne peuvent que rendre la fusion plus facile que d’automatiser la tâche.
- Fichiers de ressources / langues . Si vous avez additives modifications apportées à un fichier de ressources, assurez-vous de les déplacer toujours à la fin du fichier afin que vous puissiez facilement rappeler vos changements contre les autres les changements de. Vous pourrez peut-être copier / coller vos modifications en bas ou simplement supprimer les marqueurs de conflit.
- Faire. Ne pas. ABSOLUMENT. RE-format . Ni vous ni vos collègues développeurs ne devez effectuer un "reformatage massif du code" au cours de votre travail quotidien. Le reformatage du code ajoute un nombre excessif de faux positifs dans la gestion des conflits. Le reformatage du code peut être fait
- De manière incrémentielle, par exemple par chaque développeur à chaque commit, dès qu’ils utilisent un outil automatisé (par exemple, Eclipse a une option de reformatage lors de l’enregistrement, vanilla Visual Studio n’en a pas). Absolument, chaque développeur doit utiliser les mêmes normes de formatage de code, codées dans un fichier de format mangé par votre IDE. Pour vous donner une idée, que ce soit 4 espaces ou 2 onglets, cela n'a pas d'importance, mais c'est vraiment important si tout le monde utilise la même chose.
- Juste avant la libération, par un chef d'équipe. Si un commit de "reformatage du code" se produit lorsque les personnes ne travaillent pas sur les branches, c'est-à-dire avant qu'elles ne se ramifient, cela facilitera la tâche.
- Passez en revue le partage du travail entre vos collègues. Celui-ci est la partie où la plupart des travaux d'ingénierie vient. Comme le soulignent d’autres réponses, il ya une odeur de conception lorsque plusieurs développeurs effectuant des tâches différentes doivent toucher les mêmes ressources. Vous devrez peut-être discuter avec votre chef d'équipe de la partie qui doit être modifiée par chaque développeur simultané.
J'ai également constaté de mauvaises habitudes dans les flux de travail Git dans mes équipes. Souvent, les gens s'engagent trop dans leurs branches. J'ai personnellement vu un développeur ajouter 10 à 20 commits nommés "correctif", chacun commettant une ou deux lignes. Notre politique est que les commits sont étiquetés avec des billets JIRA pour vous donner une idée.
@JobobRobbins suggère de faire git rebase
une tâche quotidienne. Je voudrais pousser son approche en avant.
Tout d’abord, utilisez rebase une fois pour réduire le nombre de commits à une poignée. Et ne vous basez que sur la branche de développement d' origine , qui est le commit à partir duquel vous avez dérivé. Quand je dis poignée, je pourrais signifier 3 ou 4 (par exemple, tous les correctifs de base, tous les correctifs de base de données) ou tout chiffre humainement raisonnable. Une fois que vous les avez consolidées, utilisez fetch
et travaillez votre base sur la branche en amont. Cela ne vous évitera pas les conflits à moins que votre équipe revoie sa propre approche, mais rendra votre vie moins pénible.
Si vous avez des questions supplémentaires sur les tâches spécifiques, n'hésitez pas à effectuer une recherche et à poser des questions sur Stackoverflow.
[Edit] à propos de la règle du non reformatage et du scoutisme. J'ai légèrement reformulé le format RE pour souligner que ce que je veux dire est la tâche de formater à partir de zéro l'ensemble du fichier source, y compris le code qui n'a pas été touché par vous. En face de formater toujours votre propre code, qui est parfaitement boy-scouty, un certain nombre de développeurs, y compris moi-même, sont utilisés pour reformater le fichier entier avec les capacités de l'EDI. Lorsque le fichier est touché par d'autres personnes, même si le contenu et la sémantique des lignes concernées ne sont pas modifiés, Git le considérera comme un conflit. Seul un éditeur très puissant prenant en charge le langage peut suggérer que le conflit est uniquement lié au formatage et à la fusion automatique du fragment le mieux formaté. Mais je n'ai aucune preuve d'un tel outil.
Après tout, la règle du scoutisme ne vous oblige pas à nettoyer les dégâts des autres. Seulement le vôtre.