2010-04-22 5 views
6

J'utilise svn. J'ai deux branches et sur les deux ont été effectuées beaucoup de changements. En plus de l'une des branches, beaucoup de fichiers ont été renommés, donc svn ne peut pas m'aider à fusionner les changements dans ces fichiers (bien connu svn limitation).git-svn fusionner 2 svn branches

  1. Est-il possible d'utiliser git-svn pour effectuer la fusion des branches?
  2. Est-ce que git-svn va aussi gérer les fichiers renommés?

Merci

+0

Voir cette réponse: http://stackoverflow.com/questions/2945842/using-git-svn-or-similar-just-to -help-out-with-svn-merge/3585702 # 3585702 –

+0

Voir http://stackoverflow.com/questions/714589/can-git-svn-correctly-populate-svnmergeinfo-properties ... La partie "Edit:" de la 2ème réponse (pas la réponse acceptée) est particulièrement agréable –

Répondre

7

git merge devraient être en mesure de détecter (jusqu'à un certain point) renomme.

recursive

Cela ne peut résoudre deux têtes en utilisant un algorithme de fusion à 3 voies.
En outre, cela peut détecter et gérer les fusions impliquant des renames.
Il s'agit de la stratégie de fusion par défaut lors de l'extraction ou de la fusion d'une branche.

Mais git-svn peut uniquement importer/exporter depuis/vers SVN, ne pas effectuer la fusion.
Et la fusion est délicate:

CAVEATS

Par souci de simplicité et interopérer avec un système moins capable, il est recommandé (SVN) que tous les git svn utilisateurs clone, vont chercher et dcommit directement à partir du serveur SVN, et évitez toutes les opérations git clone/pull/merge/push entre les dépôts git et les branches.
La méthode recommandée pour l'échange de code entre les branches git et les utilisateurs est git format-patch et git am, ou simplement 'dcommit' sur le repository SVN.

L'exécution de git merge ou git pull n'est PAS recommandée sur une branche dont vous envisagez de vous libérer. Subversion ne représente pas les fusions de manière raisonnable ou utile; les utilisateurs de Subversion ne peuvent donc voir aucune fusion effectuée. En outre, si vous fusionnez ou tirez à partir d'une branche git qui est un miroir d'une branche SVN, dcommit peut commettre à la mauvaise branche.

Si vous ne fusionnez, notez la règle suivante: git svn dcommit va tenter de commettre au-dessus du SVN nommé dans

git log --grep=^git-svn-id: --first-parent -1 

Vous devez donc veiller à ce que la plus récente commettras de la branche à laquelle vous voulez vous engager est le premier parent de la fusion. Le chaos s'ensuivra autrement, surtout si le premier parent est un commit plus ancien sur la même branche SVN.

1

J'ai déjà eu le même problème dans un projet au collège.ce que je l'ai fait était la suivante:

  • créer un nouveau dépôt git-svn (git svn clone -s https://…)
  • fusionner les branches avec git (git checkout master; git merge branch)
  • Commander le tronc avec svn (svn co https://…/trunk)
  • copie sur les fichiers fusionnés de git
  • supprimer des fichiers à gauche sur et répertoires avec svn (svn rm)
  • commit avec svn (svn ci)
  • chercher la nouvelle livraison en git
+0

Merci pour le résumé utile. Le git a-t-il été facile à fusionner, plus facile à utiliser svn? (J'essaye de trouver une réponse à ceci: http://stackoverflow.com/questions/2945842/using-git-svn-or-similar-just-to-help-out-with-svn-merge) – inger

+0

Encore une chose , as-tu essayé de revenir à svn? Si oui, quels problèmes avez-vous/attendiez-vous? – inger

+0

@inger, non je m'engage avec svn pour m'assurer que je ne finis pas à pousser des fusions à moitié cuites que seul git comprendrait. – knittl

0

Utilisez SVN fusionner des fonctionnalités pour fusionner les branches SVN, il sera plus rapide. L'utilisation de Git pour ces problèmes est assez complexe, elle crée trop de conflits ...

Questions connexes