2010-02-17 10 views
6

J'ai un problème avec une branche SVN. J'ai fait un checkout avec git checkout -t -b stable svn/stable. Puis j'ai fusionné avec git rebase master. Après que j'ai essayé de commettre la fusion des changements dans la branche à distance avec git svn dcommitGit: Comment commettre dans la branche SVN après rebase?

Mais maintenant, il semble que Git a poussé les changements dans le tronc au lieu de la branche :(

Et git status me dit:

# On branch stable 
# Your branch and 'svn/stable' have diverged, 
# and have 218 and 52 different commit(s) each, respectively. 
# 
# Untracked files: 
# (use "git add <file>..." to include in what will be committed) 
... 

est-ce que quelqu'un sait ce que je fait de mal et comment le faire droit

Répondre

2

? J'ai récemment frappé la même erreur. la chose est que lorsque vous rebasage à maîtriser, d'abord dur rese ts branche actuelle à master, puis applique commits étant fusionné à elle. Mais votre branche principale est associée à svn/trunk et ainsi la branche nouvellement réinitialisée devient également associée. Donc git-svn sur dcommit pense que les commits sont "insérés" dans svn/trunk quand vous les poussez. La solution est d'utiliser git merge --no-ff au lieu de git rebase. Ou pour utiliser les fonctions de fusion de Subversion elle-même.

+0

Hmm merci, je sais au sujet de la possibilité d'utiliser la fusion git, mais je desserrerez l'histoire et beaucoup révision d'autres informations. Seront-ce aussi une solution pour rebaser avec une branche de maître au lieu du maître lui-même? – ownking

+0

@tigerseye, je doute que de telles astuces de ramification vous aideront. puisque le commit associé à 'svn/trunk' entrera dans votre branche de toute façon. Pour conserver l'historique des révisions, vous pouvez fusionner avec Subversion. Sinon, vous ne ferez que polluer le journal de subversion et d'autres développeurs ne seront pas satisfaits de cela. –

+0

Je suis nouveau à git et je vois vraiment les avantages, mais dans ces étapes difficiles, il semble parfois trop difficile pour les défis quotidiens. N'est-ce pas un scénario courant dans le monde des commutateurs git de fusionner une branche de développement en une branche SVN stable quoiqu'il existe une façon commune de le faire? – ownking

0

Maintenant, il fonctionne, je l'ai fait comme ceci:

git checkout master 
    git svn rebase 
    git checkout --track -b svn_stable svn/stable 
    git merge --squash master 
    git commit -m "Bring stable up-to-date with trunk" 
    git svn dcommit --dry-run 
    git svn dcommit 

La fusion était beaucoup plus facile que rebasage avec la gestion des conflits.

Dans cet essai, j'ai oublié d'utiliser --no-ff, ce qui force un commit pour chaque fusion, non?

Merci pour votre aide :)

Questions connexes