git-svn: comment créer une nouvelle branche svn via git?

193

J'ai un dépôt git qui suit un dépôt svn. Je l'ai cloné en utilisant --stdlayout.

J'ai créé une nouvelle succursale locale via git checkout -b foobar

Maintenant, je veux que cette branche se retrouve …/branches/foobardans le référentiel svn.

Comment dois-je procéder?

(Vous avez coupé beaucoup de texte d'enquête. Consultez l'historique des questions si vous vous souciez)

kch
la source

Réponses:

280

Je sais que cette question a été répondue il y a un certain temps, mais après l'avoir lue, je pourrais aider à ajouter des exemples de la commande de branche git svn spécifique et à la relier à un flux de travail typique.

Comme kch a répondu, utilisez git svn branch. Voici un exemple complet (notez le -npour un essai à sec à tester):

git svn branch -n  -m "Branch for authentication bug" auth_bug

Si cela se passe bien, le serveur répond avec une réponse comme celle-ci:

Copie de https://scm-server.com/svn/portal/trunk sur r8914 vers https://scm-server.com/svn/portal/branches/auth_bug ...

Et sans le -ncommutateur, le serveur ajoute probablement quelque chose comme:

Point de branchement possible trouvé: https://scm-server.com/svn/portal/trunk => https://scm-server.com/portal/branches/auth_bug , 8914

Parent de branche trouvé: (refs / remotes / auth_bug)

d731b1fa028d30d685fe260f5bb912cbf59e1971

Parent suivant avec do_switch

Parent suivi avec succès r8915 = 6ed10c57afcec62e9077fbeed74a326eaa4863b8

(refs / télécommandes / auth_bug)

La meilleure partie de celui-ci, maintenant vous pouvez créer une branche locale basée sur votre branche distante comme ceci:

git checkout -b local/auth_bug auth_bug

Ce qui signifie "extraire et créer une branche locale nommée auth_buget la faire suivre la branche distante (dernier paramètre)auth_bug

Testez que votre branche locale fonctionne sur cette branche distante en utilisant dcommitavec --dry-run( -n):

git svn dcommit -n

Et le serveur SVN devrait répondre avec le nouveau nom de la branche:

S'engager sur https://scm-server.com/svn/portal/branches/auth_bug ...

Jesper Rønn-Jensen
la source
2
Ouais, git co signifie que Jesper a mis en place un alias git.
Jason Axelson
3
mis à jour et remplacé git copar git checkoutpour que l'exemple puisse fonctionner pour tout le monde
Jesper Rønn-Jensen
5
J'ai déjà voté cette réponse, mais je ne sais pas combien de fois je reviens. Je vous remercie!
Ben Doerr
35
Il y a une partie délicate dans la git-svn branchcommande - vous devez être en ligne pour créer une nouvelle branche de cette façon. Vous pouvez effectuer les opérations suivantes hors ligne: 1. git checkout -b foobar2. hack-hack-hack 3 git commit -m "Done foobar".. Et lorsque vous êtes en ligne, appuyez sur ce changement en faisant 1. git svn branch foobar2. git branch --set-upstream foobar remotes/foobar3 git svn dcommit..
vadishev
2
Remplacez donc l'étape 2 par git checkout -b foobar-new remotes/foobar. 3. git checkout foobar4. git rebase foobar-new5. Pour tester pour vous assurer que la branche est maintenant validée sur la branche svn. git svn dcommit --dry-run6. Enfin valider réellement git svn dcommit7. Supprimer la branche temporairegit branch -D foobar-new
jjcf89
64

à partir de git v1.6.1, git svn branchest disponible.

Depuis les git docs:

    branche
        Créez une branche dans le référentiel SVN.

        -m, --message
            Permet de spécifier le message de validation.

        -t, --tag
            Créer une balise en utilisant le tags_subdir au lieu du branches_subdir
            spécifié pendant git svn init.

Les versions précédentes de git ne permettent pas de créer une branche svn.

kch
la source
4

@kch Je viens (7 décembre 2008) de compiler la balise v1.6.1-rc1 de git et elle contient la commande de branche git svn et la documentation correspondante. Donc, la version v1.6.1 de git devrait (espérons-le) contenir cette commande.

Bryan J Swift
la source
en effet, j'ai installé 1.6.1 maintenant et la commande est disponible. mis à jour ma réponse en conséquence.
1er