web-dev-qa-db-fra.com

Git-svn: créer et pousser une nouvelle branche/tag?

Après avoir cloné un référentiel SVN à l'aide de git-svn avec l'option -s (git svn clone http://server/repo -s), comment créer une branche ou une balise et le placer dans le répertoire de branches/balises approprié dans le référentiel lorsque dcommiting?

Par exemple; si je devais utiliser git pour créer une branche foobar localement (git checkout -b foobar), comment puis-je avoir git-svn create la branche sur le serveur (http://server/repo/branches/foobar)?

J'utilise Git 1.5.5.6.


Notez s'il vous plaît:

La méthode acceptée ci-dessous ne fonctionne pas avec Git 1.5.5.6 car il n’existe pas de méthode git svn branch. Je cherche toujours une solution à ce problème qui n'implique pas la résolution de travailler directement avec svn.

53
Phillip B Oldham

Vous pouvez lire tous les détails dans ce tutorial , mais le Gist est fondamentalement le suivant:

$ git svn branch -m "Topic branch" my_topic            # Create SVN branch called "my_topic"
$ git checkout --track -b my-topic remotes/my_topic    # Create the Git branch for "my_topic"
# Hack hack hack...
$ git svn dcommit --dry-run    # Make sure you're committing to the right SVN branch
$ git svn dcommit              # Commit changes to "my_topic" branch in SVN
71
mipadi

Si vous avez créé votre branche locale avant l'existence de la branche Subversion et que vous souhaitez maintenant transférer votre branche locale dans une branche Subversion, vous pouvez procéder comme suit:

Obtenir la révision de branche svn attribuée à la branche locale 

$ git svn info

à partir de la sortie, le champ URL serait le chemin de la branche svn actuelle et le champ Revision serait le numéro de révision Subversion

Créez la branche svn à partir de la révision que vous avez créée votre branche locale

$ svn cp http://svn-repo/my_app/trunk@123 http://svn-repo/my_app/branches/feature1

Récupérez la nouvelle branche svn afin que votre dépôt git le sache

$ git svn fetch

La branche svn devrait maintenant être ajoutée en tant que télécommande dans votre dépôt Git $ git branch -a * feature1 master remotes/feature1

À ce stade, votre télécommande sera toujours le coffre. Vous devez indiquer votre branche locale à la nouvelle branche distante. Vous pouvez le faire en rebasonnant votre branche locale à partir de votre branche distante: $ git rebase remotes/feature1

Maintenant que votre branche locale fait référence à votre branche distante, vous pouvez y enregistrer vos modifications. Commencez par effectuer un essai pour vous assurer que vos modifications iront dans votre branche distante: $ git svn dcommit --dry-run Commiting to http://svn-repo/my_app/branches/feature1

Maintenant, vous pouvez valider les modifications apportées à votre branche distante $ git svn dcommit

La plupart des procédures vous diront de commencer par créer une branche, puis de créer une branche locale qui suivra la branche distante. Mais souvent, je ne décide pas à l'avance si ma succursale locale doit suivre une succursale distante. Souvent, je branche en local et j'apporte des modifications sans intention de pousser dans une branche distante. Si par la suite je décide d'engager ma branche locale dans une branche distante, j'effectue les étapes ci-dessus.

54
pestrella

Je voulais juste souligner que vous ne devriez pas vous baser sur votre branche récemment créée à partir d'éléments que vous avez déjà dans une autre branche git. git svn dcommit sera ensuite après Push to trunk semble-t-il. Au moins c'était un problème pour moi.

Au lieu de cela, si vous souhaitez extraire les modifications d’une ancienne branche git sur cette nouvelle branche svn, utilisez par exemple. cherry-pick.

0
yngve