Question

Comment puis-je obtenir un correctif d'un commit afin de l'envoyer à un autre développeur? Et comment éviter au mieux un conflit de fusion avec ce correctif lors de la fusion ultérieure de nos arbres?

Si vous savez comment, expliquez comment procéder dans le VCS de votre choix, tel que subversion, git, Mercurial, bzr ou autre.

Était-ce utile?

La solution

Dans git , vous pouvez diriger la sortie de git-diff entre deux commits comme celui-ci:

git diff fa1afe1 deadbeef > patch.diff

Envoyez le patch.diff au développeur et laissez-le git-apply dans son espace de travail comme suit:

git apply patch.diff

Si l'autre développeur dispose déjà des commits dans son référentiel, il peut toujours le gérer lui-même sans fusionner de la manière suivante:

git apply < git diff fa1afe1 deadbeef

Vous pouvez ensuite ajouter et < a href = "http://www.kernel.org/pub/software/scm/git/docs/git-commit.html" rel = "noreferrer"> valider les modifications apportées au diff comme d'habitude .

Maintenant, voici la partie intéressante lorsque vous devez fusionner le correctif avec la branche principale (qui est publique). Considérez l’arborescence de révision suivante dans laquelle C * est le correctif appliqué à partir de C dans la branche principale:

A---B---C---D          master, public/master
     \
      E---C*---F       feature_foo

Vous pouvez utiliser git-rebase pour mettre à jour le branche de sujet (dans cet exemple nommée feature_foo ) avec sa tête en amont. Cela signifie que vous saisissez ce qui suit:

git rebase master feature_foo

Git réorganisera l’arbre de révision de la manière suivante et appliquera également le correctif lui-même:

A---B---C---D          master, public/master
             \
              E*---F*  feature_foo

La fusion avec la branche en amont sera désormais une fusion simple et rapide. Vérifiez également que les nouveaux commits E * et F * fonctionnent respectivement en tant que E et F précédents.

Vous pouvez faire la même chose contre la branche d'un autre développeur en suivant les mêmes étapes, mais au lieu de le faire sur un référentiel public, vous serez recherche de révisions à partir du référentiel du développeur. De cette façon, vous ne devrez pas demander de patch à l’autre développeur s’il est déjà disponible dans ce qu’il a publié sur son dépôt.

Veuillez noter que ne refondez jamais une branche publique , car la commande réécrivera l'historique git, ce que vous ne voulez pas faire sur les branches dont dépendent les utilisateurs et qui créeront un désordre lors de la fusion vers une connexion distante. les dépôts. N'oubliez jamais de intégrer fréquemment pour que d'autres membres de votre équipe puissent prendre part à vos modifications.

Autres conseils

Sous SVN, vous pouvez simplement apporter vos modifications puis, avant de valider, diriger la sortie du diff svn vers un fichier en tant que tel

svn diff > mypatch.diff

vous pouvez ensuite annuler vos modifications et appliquer le correctif ultérieurement à l'aide de

patch -p0 -i mypatch.diff

Comme toujours, n'appliquez pas aveuglément des correctifs à votre code et inspectez-les toujours en premier.

Vous pouvez également constater que le correctif brisera votre code source si les fichiers source ont suffisamment changé depuis la prise du correctif.

Vous ne pouvez pas non plus garantir qu'il n'y aura pas de conflit de fusion lorsque vous tenterez d'insérer le code.

Bzr gère l'envoi d'une "directive de fusion", ce qui signifie qu'il envoie le correctif pour vous afin que l'autre partie puisse simplement cliquer sur "OK". pour fusionner et réduire les risques de patch / apply, etc.

juste:  $ bzr send -o mycode.patch

Dans Subversion, il n’ya pas de bonne façon de faire cela. Oui, vous pouvez utiliser svn diff + patch, mais cela ne fera que retarder vos problèmes jusqu'à ce que vous alliez fusionner. Il est fort probable que vous l'ayez oublié.

Pour Subversion, vous devez créer une branche, effectuer la validation sur la branche et demander au destinataire du correctif de basculer sur la branche. Vous pouvez ensuite fusionner la branche dans le coffre de la manière habituelle.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top