6
votes

GIT-SVN Fusionner 2 branches SVN

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, alors maintenant SVN ne peut pas m'aider à fusionner des modifications dans ces fichiers (bien connaître la limitation SVN).

  1. est-il possible d'utiliser Git-svn pour effectuer la fusion des succursales?
  2. git-svn giclera également des fichiers?

    merci


2 commentaires

3 Réponses :


7
votes

git fusion < / a> devrait être capable de détecter (jusqu'à un certain point) renorme.

récursif

Ceci ne peut résoudre que deux têtes à l'aide d'un algorithme de fusion à 3 voies.
De plus, cela peut détecter et gérer des fantasmes impliquant des renommés.
Ceci est la stratégie de fusion par défaut lors du tirage ou de la fusion d'une branche.

mais git-svn peut seulement importer / exporter de / vers svn, ne pas faire la fusion.
Et la fusion est délicate:

mises en garde

Pour des raisons de simplicité et d'interopérer avec un système moins capable (SVN), il est recommandé que tous les utilisateurs git svn se clonent directement à partir du serveur SVN et évitent tout Clone / Tire / Fusionner / Poussez les opérations entre référentiels GIT et branches.
La méthode recommandée d'échange de code entre les branches GIT et les utilisateurs est le format GIT-PATCH et GIT AM, ou simplement «DCOMMIT'ing» dans le référentiel SVN.

L'exécution de la fusion GIT ou de la poitrine GIT n'est pas recommandée sur une succursale que vous envisagez de dcommant. Subversion ne représente pas de fusion de manière raisonnable ou utile; Les utilisateurs utilisant Subversion ne peuvent voir aucune fusion que vous avez faite. En outre, si vous fusionnez ou tirez d'une branche GIT, un miroir d'une branche SVN, DCommit peut s'engager à la mauvaise branche.

Si vous fusionnez, notez la règle suivante: Git SVN DCommit tentera de s'engager sur le SVN commet nommé dans xxx

Vous devez donc vous assurer que la plus récente commit de la succursale que vous souhaitez dommage 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.


0 commentaires

1
votes

J'ai eu une fois le même problème dans un projet au collège. Ce que j'ai fait était le suivant:

  • Créez un nouveau référentiel git-svn ( git svn clone -s -s https: // ... )
  • Fusionner les branches avec git ( Git Checkout Master; Branche de git Fusionne )
  • Checkout Le coffre avec svn ( svn co https: // ... / coffre )
  • copie sur les fichiers fusionnés de git
  • Supprimer des fichiers et des répertoires à gauche avec svn ( svn rm )
  • commettre avec svn ( svn ci )
  • récupérez le nouveau commit dans GIT

4 commentaires

Merci pour le résumé utile. Le git fusion a-t-il été facile, plus facile qui le fait par SVN? (J'essaye de trouver une réponse à ceci: Stackoverflow.com/Questtions/2945842/... )


Une autre chose, avez-vous essayé de remédier à SVN? Si oui, quelles problèmes vous obtenez / attendiez-vous?


@inger, non, je vous ai commis avec SVN pour vous assurer que je ne finirez pas de pousser à moitié cuit à demi-cuité que seul Git comprendrait.


Vous pourriez utiliser --Squash pour piloter la fusion dans un commettre. Il devrait donc être plus sûr de repousser cela dans SVN (sinon vous pouvez finir par dupliquer beaucoup de commissions précédentes) Link: ryansch.blogspot.co.uk/2009/09/git-svn-and-squash.html



0
votes

Utilisez les fonctionnalités SVN Fusionner pour fusionner les branches SVN, ce sera plus rapide. L'utilisation de GIT pour ces problèmes est assez complexe, cela crée trop de conflits ...


0 commentaires