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 dcommit
ing?
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.
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
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.
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.