58 votes

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

Après le clonage d'un référentiel SVN en utilisant git-svn avec l' -s option (git svn clone ), comment créer une branche ou une étiquette et ont poussé à la branche/étiquette répertoire dans le référentiel lorsqu' http://server/repoing?

Par exemple; si j'étais à l'utilisation de git pour créer un -s de la branche locale (dcommit) comment puis-je avoir git-svn créer la branche sur le serveur (foobar)?

J'utilise Git 1.5.5.6.


Veuillez Noter:

La méthode ci-dessous ne fonctionne pas avec Git 1.5.5.6 comme il n'y a pas d' git checkout -b foobar méthode. Je suis toujours à la recherche d'une solution à ce qui n'implique pas de se résoudre à travailler avec svn directement.

74voto

mipadi Points 135410

Vous pouvez lire tous les détails essentiels dans ce tutoriel , mais l'essentiel est essentiellement 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
 

59voto

pestrella Points 1982

Si vous avez créé votre succursale locale avant la subversion de la branche existé et que vous voulez pousser votre succursale locale dans une subversion de la branche, vous pouvez effectuer les opérations suivantes:

Créer de la branche svn de la révision que vous avez créé votre succursale locale

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

Chercher la nouvelle branche svn afin que votre repo git sait à ce sujet

 $ git svn chercher

La branche svn doit maintenant être ajouté à distance dans votre repo git

 $ git branch -a
 * feature1
maître
télécommandes/feature1

À ce moment, la distance sera toujours tronc. Vous avez besoin de faire pointer votre antenne locale de la nouvelle succursale à distance. Vous pouvez le faire par la relocalisation de votre succursale locale de la branche distante:

 $ git rebase télécommandes/feature1

Maintenant que votre succursale locale reportez-vous à votre succursale à distance, vous pouvez valider vos modifications sur elle. D'abord faire un essai si vous êtes certain que vos modifications entreront dans votre à distance:

 $ git svn dcommit --dry-run
 S'engager à http://svn-repo/my_app/branches/feature1

Maintenant, vous peuvent commettre des modifications à votre succursale à distance

 $ git svn dcommit

La plupart des tutoriels vous indiquera à la direction de la subversion en premier et ensuite créer une branche locale qui suit la branche distante. Mais j'ai souvent de ne pas décider à l'avance si ma branche locale doit suivre une branche distante. Souvent je branche localement, et d'apporter des modifications sans aucune intention de pousser à une branche distante. Si je décide plus tard de commettre mon local de branche en branche à distance-je effectuer les étapes ci-dessus.

0voto

yngve Points 371

Je voulais juste souligner que vous ne devriez pas vous baser sur votre branche récemment créée à partir de choses que vous avez déjà dans une autre branche git. git svn dcommit sera ensuite poussé vers le coffre, semble-t-il. Au moins c'était un problème pour moi.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X