2012-09-26 5 views
2

J'utilise git-svn ces derniers temps pour gérer un référentiel vieux svn par git.fusion Git-svn et engageant les branches

J'ai récemment travaillé dans une branche que j'ai créé comme ceci:
git checkout -b local-branch svn-branch

J'ai alors depuis travaillé dans cette branche et commiting retour à la svn-branche en utilisant:
git svn dcommit

maintenant qu'il est temps de fusionner la branche locale de retour à i maître a essayé de faire ce qui suit:
git checkout master
git merge local-branch

Jusqu'ici, tout va bien. Maintenant, je veux engager la fusion de retour à la subversion donc j'essaie ceci:
git svn dcommit

Cependant, maintenant mon maître commettait de nouveau à la branche branche svn et non le tronc comme je l'aurais attendu. Y at-il quelque chose que j'ai raté ou est-ce que ce genre de fusion n'est pas recommandé de fusionner entre les branches svn comme ça?

Comme une note de côté, je la place a fait la fusion par svn, mais je voudrais éviter d'avoir à utiliser svn autant que possible. Quelle est la meilleure façon de gérer cela?

Répondre

3

git svn dcommit envoie toujours les modifications à l'URL spécifiée dans la signature git-svn-id qui est la dernière en date de la chaîne de validation du premier parent dans l'historique de HEAD. Je suppose que votre fusion a été accélérée (c'est-à-dire que la référence principale était accessible depuis local-branch/svn-branch), elle a donc été définie sur local-branch par "git merge" plutôt que par fusion.

Comme une recommandation toujours utiliser l'option --no-ff avec « fusion git » parce que Subversion n'a pas un tel concept de fusion avance rapide. (Vous pouvez définir cette option (merge.ff=true) par défaut dans config [ou branch.master.mergeoptions à « --no-ff » pour Git < 1.7.6] mais notez que « git pull » deviendra-terme non trop rapide si vous utilisez plus Et pour éviter SVN et/ou git-svn: si vous avez un accès à votre serveur de référentiel, vous pouvez jeter un oeil au projet SubGit qui fournit une interface Git pure (pas git-svn) à Subversion. Même dans le cas de SubGit, l'option -no-ff est fortement recommandée car la fusion rapide (et le rebasement rapide) ne peut pas être distinguée de la suppression de branche et de la recréation d'un autre commit (ceci est vrai pour tout Git < -> SVN translation outil).

Mais peut-être une autre raison (je ne connais pas d'autre) causé « git-svn-id » avec l'URL de la branche (au lieu de l'URL du tronc) dans le dernier message de validation. De toute façon, assurez-vous que le maître pointe vers un commit correct.

+0

Merci, je l'ai essayé en ajoutant un nouveau fichier dans ma branche, puis il a fusionné de nouveau dans le maître avec 'git fusion-branche locale de-ff' puis engager le maître à svn avec' git svn dcommit' et cette fois il s'est engagé à tronc. – carl

Questions connexes