2008-10-10 9 views
60

Un mot d'avertissement: Je suis un n00b à git en général. Mon équipe utilise des branches de fonctionnalité dans svn, et j'aimerais utiliser git-svn pour suivre mon travail sur une branche particulière. Je suis (environ) après Andy Delcambre's post de mettre en place mon git locale repo, mais ces instructions semblent avoir conduit git à choisir la branche svn qui avait changé plus récemment comme dépôt distant; le problème est que ce n'est pas la branche qui m'intéresse. Comment contrôler quelle branche utilise git-svn? Ou est-ce que j'approche complètement cela?Comment faire pour que git-svn utilise une branche svn particulière en tant que dépôt distant?

MISE À JOUR: Je l'ai fait utiliser les -T, -b et -t les options (dans mon cas parce que le repo svn a plusieurs projets, mais je veux le contenir repo git que le projet je travaille).

Répondre

60

Muchas gracias au blog de Bart pour ce pratique reference for svn branches in git. Apparemment, tout ce que je avais besoin était de spécifier une branche à distance lors de la création de la branche git, par exemple,

git checkout -b git-topic-branch-foo foo 

foo est le nom de la branche à distance.

+8

Si vous avez déjà créé votre branche git, vous pouvez également utiliser 'git rebase' pour le rebaser sur la branche svn. – rampion

+0

http://www.jukie.net/~bart/blog/svn-branches-in-git renvoie l'erreur 500. Le blog a-t-il été déplacé ou quelque chose? – Henry

+0

Merci, cela semble être le seul moyen d'obtenir git pour vérifier une branche dans un état non-détaché. –

1

J'utilise git-svn mais je n'ai pas utilisé les fonctions interopérables avec les branches SVN. Cela dit, je remarque que le tutoriel que vous suiviez n'utilisait pas les options -T, -b, -t pour git svn init. Ces options disent à git-svn ce que les répertoires trunk/branches/tags en amont sont nommés, ce qui peut être important dans votre situation.

+0

Merci, Greg. Malheureusement pour moi, c'est la différence entre ma configuration et celle du blog. –

30

Vous pouvez également jeter un oeil à ceci: git-svn is a gateway drug - robby on rails.

J'ai utilisé quelque chose comme ça quand je avais besoin pour vous assurer que ma branche locale pointait à la branche svn à distance correcte:

git branch -r 

pour obtenir le nom de la branche à distance que je veux être suivi. Puis

git reset --hard remotes/svn-branch-name 

de modifier explicitement ma branche locale pour pointer vers une branche distante différente.

+2

+1 pour la réinitialisation de git - chose difficile - juste ce que j'étais après :) –

+1

c'est un processus manuel pour forcer une branche locale à mettre à jour à l'état actuel d'une branche svn à distance. la question que j'ai lue a plus à voir avec les fonctions de suivi à distance de git et la configuration de git pour suivre automatiquement une branche spécifique dans SVN. –

9

je devais courir "chercher svn git d'abord, puisque la branche je voulais associer avait été créé après mon client git.

+0

merci, pour cette astuce, et comme une note, si vous trouvez, vous pouvez voir les télécommandes dans .git/svn/refs/télécommandes, et s'il y en a un nouveau, après avoir exécuté 'git svn fetch', il devrait apparaître là . –

+0

attention à regarder en .git, les choses là-bas peuvent changer. En particulier, les refs peuvent parfois être emballés dans des refrappés, en particulier s'ils ne changent pas beaucoup, et ne seront pas lâches, même s'ils sont présents. git show-ref le fait mieux, et (peut-être) git branche -r encore mieux – ComputerDruid

+1

si vous lancez 'get checkout -b git-topic-nom-branche remote-branche-name' et obtenez' fatal: git checkout: mise à jour des chemins est incompatible avec le changement de branche. » Ensuite lancez' git branch -r', et si vous ne voyez pas la branche, c'est alors que 'git svn fetch' est nécessaire. ('git svn rebase' ne tirera pas la nouvelle branche, mais' git svn fetch' sera) –

Questions connexes