131 votes

Fourche et synchroniser Google Code Subversion repository sur GitHub

Comment puis-je la fourche et de conserver la synchronisation avec un Code Google dépôt Subversion que je n'ai pas accès en écriture, dans un dépôt GitHub?

Je veux être en mesure de développer mes propres traits dans mon dépôt Git, mais je veux aussi synchroniser contre le Google Code référentiel Subversion. Pour chercher des correctifs de Google Code du projet côté.

Je sais que sur git-svn et l'a utilisé avant d'amont et d'aval à un dépôt Subversion, j'ai eu un contrôle complet sur. Mais je ne sais pas comment conserver la synchronisation avec Google Code référentiel Subversion.

178voto

richq Points 29694

La branche distante à partir de git-svn est à peu près la même chose que régulier Git remote. Donc, dans votre dépôt local, vous pouvez avoir votre git-svn clone et pousser les changements de GitHub. Git n'a pas de soins. Si vous créez votre git-svn clone et pousser exactement les mêmes changements à GitHub, vous aurez officieux de miroir de la Google référentiel de Code. Le reste est de la vanille Git.

git svn clone http://example.googlecode.com/svn -s
git remote add origin git@github.com:example/example.git
git push origin master

Maintenant que vous avez cette, de temps en temps, vous aurez à synchroniser le dépôt Subversion avec Git. Ça va ressembler à quelque chose comme:

git svn rebase
git push

Dans gitk ou que ce soit, ce serait ressembler à ceci:

o [master][remotes/trunk][remotes/origin/master]
|
o
|
o

Et lorsque vous exécutez git svn rebase, vous avez ceci:

o [master][remotes/trunk]
|
o
|
o [remotes/origin/master]
|
o
|
o

Donc maintenant en cours d'exécution git push pousser ceux s'engage à GitHub, le [remotes/origin/master] de la branche. Et vous seriez de retour au scénario dans la première ASCII art diagramme.

Le problème est maintenant, comment travaillez-vous vos modifications dans le mélange? L'idée est, vous ne jamais s'engager sur la même branche que vous êtes git-svn rebase-ing et git-pousse. Vous avez besoin d'une branche distincte pour vos changements. Sinon, vous vous retrouvez rebasage vos changements sur le dessus de la Subversion, ce qui peut fâcher personne qui les clones de votre dépôt Git. Suivez-moi? OK, donc vous créez une branche, appelons-les "fonctionnalités". Et vous faites un commit et le pousser à GitHub pour les fonctions de direction générale. Votre gitk ressemblerait à quelque chose comme ceci:

o [features][remotes/origin/features]
|
o
|
o [master][remotes/trunk][remotes/origin/master]
|
o

Ici vous avez les caractéristiques de votre branche d'un couple de s'engage devant le Google Code de la branche, non? Donc ce qui arrive quand vous voulez intégrer de nouvelles choses à partir de Google Code? Vous passerais git svn rebase première et d'obtenir ceci:

                           o [features][remotes/origin/features]
[master][remotes/trunk] o  |
                        |  o
                        o /
                        |/
                        o[remotes/origin/master]
                        |
                        o

Si vous git push master, vous pouvez imaginer l' [remotes/origin/master] être au même point que maître. Mais votre branche n'a pas les changements. Vos choix sont maintenant de fusionner master en fonctionnalités, ou rebase fonctionnalités. Une fusion pourrait ressembler à ceci

git checkout features
git merge master 

            o [features]
           /|
          / o [remotes/origin/features]
[master] o  |
         |  o
         o /
         |/
         o
         |
         o

Puis vous appuyez sur des fonctionnalités de GitHub. J'ai quitté les télécommandes pour maître pour économiser de l'espace, ils seraient au même point que [master].

Le rebase approche est un peu plus mal que vous auriez à pousser avec --force que votre poussée ne serait pas une avance rapide de fusion (vous devez tirez sur les caractéristiques de la branche de la vertu de quelqu'un qui avait cloné). Ce n'est pas vraiment considéré comme OK pour le faire, mais personne ne peut vous arrêter si vous êtes déterminé. Il ne rendre les choses plus facile aussi, comme lorsque des correctifs être accepté en amont légèrement retravaillé la forme. Ça évitera d'avoir à se soucier des conflits, vous pouvez simplement rebase --skip la upstreamed patchs. De toute façon, un rebase serait comme ceci:

git rebase master features

         o [features]
         |
         o
         |  o [remotes/origin/features]
[master] o  |
         |  o
         o /
         |/
         o
         |
         o

Et ensuite, vous avez en git push --force . Vous pouvez voir pourquoi vous avez besoin de forcer, l'histoire a un gros vieux schisme de l' [remotes/origin/fonctionnalités] pour le nouveau courant de l'après-rebase [caractéristiques].

Ça fonctionne, mais c'est beaucoup d'effort. Si vous allez être un contributeur régulier, le meilleur pari serait de travailler comme ça pendant un moment, envoyer quelques correctifs en amont et voir si vous pouvez obtenir un accès de commit à la Subversion. À défaut, peut-être ne poussez pas vos modifications à GitHub. Garder les locaux et de les essayer et de les faire accepter en amont de toute façon.

15voto

Mechanical snail Points 8589

svn2github service

Le site web http://svn2github.com/ qui fournit un service à l'assiette tout public accessible SVN repository sur Github (à https://github.com/svn2github/projectname). Je l'ai essayé; en appuyant le bouton "Faire un miroir" il n'a apparemment rien pendant quelques secondes, puis affiche le message "erreur", mais elle a effectivement travaillé. Le nouveau référentiel a été en fait créé, contenant le code de l'repo SVN.

Vous serait alors fourche le référentiel qu'il crée, et de travailler sur votre propre fourchette. Vous pouvez alors soumettre vos modifications à l'amont du projet à l'aide de leur outil de suivi d'anomalies.

En regardant les référentiels existants dans le cadre du service de Github de l'utilisateur (par exemple, "svn2github poussé à maîtriser à svn2github/haxe 5 heures"), il ne semble pas régulièrement tirer dans les modifications sur le dépôt SVN. Il n'y a pas d'informations sur la personne qui exécute le service sur le site, donc je n'aurais pas parié sur elle continue de s'exécuter indéfiniment, mais il fonctionne pour l'instant (et si jamais il tombe en panne, vous pouvez toujours mettre à jour manuellement votre fourche).

Launchpad

Si vous n'êtes pas fixé sur l'utilisation de Git et Github, une autre alternative est d'utiliser Launchpad.net. Launchpad peut importer automatiquement SVN (également CVS) des dépôts de dans un personnel bzr branch. Pour ce faire, créez une rampe de lancement de projet, puis aller pour la nouvelle page d'importation, sélectionnez la Subversion et entrez l'URL (par exemple, http://projectname.googlecode.com/svn/trunk/). En fonction de la taille du projet, de l'importation initiale peut prendre jusqu'à quelques heures. Les importations ultérieures sera exécuté périodiquement.

Pour plus de documentation, de voir les CV les Importations sur le Launchpad de l'Aide.

10voto

akaihola Points 10007

Un guide pour la synchronisation de Google Code vers GitHub est disponible sur fnokd.com . L'auteur utilise un serveur distant permanent et une tâche cron pour automatiser la synchronisation et conserver la ligne de réseau SVN dans une branche GitHub appelée "fournisseur".

2voto

nick black Points 86

GitHub prend désormais en charge l'importation directe de projets de subversion (voir http://help.github.com/import-from-subversion/ ). Créez simplement un nouveau dépôt, puis cliquez sur "Import from Subversion" dans l'écran "Next Steps". Il ne prend pas en charge la synchronisation ultérieure, cependant: /.

1voto

Marcin Gil Points 16951

Hmm .. Dans mon entreprise, je faisais presque la même chose. Juste avoir les deux repo .svn et .git dans le même répertoire (vous extrayez svo repo et créez go repo dans cette copie de travail).

Ensuite, en utilisant svn up et git push. Bien sûr, si vous diverger beaucoup, vous devrez fusionner les choses à la main.

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