9
votes

Après Svn2Git, pouvez-vous chercher des changements de SVN?

Donc, j'ai converti un référentiel SVN en un référentiel Git à l'aide de SVN2Git, car j'ai supposé qu'il n'y aurait plus de travail sur le référentiel SVN. Cependant, quelqu'un d'autre ne savait pas que nous passions à Git (c'est un peu compliqué, mais il travaillait essentiellement sur un dossier spécifique) afin qu'il ait fabriqué des engagements à SVN. Maintenant, je veux obtenir ces engagements dans Git. Puis-je quand même faire cela, ou est-ce que svn2git est complètement unidirectionnel?

Si non, existe-t-il un moyen de générer des correctifs de SVN commettrations, en quelque sorte un analogique à Git Format-Patch ? Je n'arrive pas à en trouver un dans une recherche superficielle; Il semble que les développeurs SVN ne pensaient jamais que vous voudriez convertir les engagements en patchs.


0 commentaires

5 Réponses :


3
votes

Vous pourriez jeter un coup d'œil sur GIT-SVN .

Les patchs manuels dans Subversion sont effectués VIA DIFF .


5 commentaires

@DAV: Bon commentaire (j'ai supprimé ma réponse). +1 pour votre message


Bien à droite, je sais à propos de Git Svn, mais je ne l'ai pas utilisé en partie parce que je voulais oublier que SVN existait jamais;). De toute évidence, SVN2Git est en quelque sorte un wrapper autour du clone Git Svn, qui fonctionne un peu de nettoyage. À ce stade, il y a un tas de choses que je me suis engagée à gater via des correctifs et que je ne veux pas utiliser Git Svn et réappliquer toutes mes patchs à nouveau, puisque nous sommes en train de sortir de SVN de toute façon. Mais je pense que l'approche manuelle des correctifs devrait fonctionner pour moi, puis je peux les engager avec l'auteur approprié ou le laisser lui commettre lui-même une fois qu'il me donne une clé SSH pour la gitose.


Attendez une minute, cette approche manuelle DIFF n'est pas ce que je voulais. Cela ne fonctionne pas pour des choses qui sont déjà engagées dans SVN, des choses différentes entre la tête SVN et la copie de travail.


Vous pouvez prendre différentes révisions dans une histoire SVN au lieu de 1 révision + copie de travail. Spécifiez simplement les deux révisions que vous souhaitez diff: SVN DIFF -R REV1: REV2


SVN2Git est en effet simplement une enveloppe autour de GIT-SVN et le référentiel original qu'il crée peut tirer plus de modifications de SVN en utilisant des commandes GIT SVN. Je devais le faire moi-même récemment. J'ai rafolié un script de rubis modifié qui ne fait que les étapes de suivi (qui impliquent principalement la conversion des balises SVN en étiquettes GIT) afin que je puisse faire un git svn chercher dans le repo, puis faire le reste du traitement de SVN2GIT sur les trucs nouvellement tiré.



5
votes

De votre description, on dirait qu'il n'y avait que quelques commits en subversion que vous souhaitez ramasser. La méthode la plus directe consiste à extraire et à appliquer chaque patch manuellement, ce que je vais décrire ici. Tout d'abord, vous pouvez utiliser la commande svn diff code> pour extraire les diffs (un "diff" équivalent fonctionnellement à un "patch").

git add -u
env GIT_AUTHOR_NAME="new name" GIT_AUTHOR_EMAIL="new email" git commit


1 commentaires

Cool, je ne savais pas comment utiliser SVN DIFF sur les révisions, devrait probablement avoir juste RTFM. J'étais paresseux et j'utilise juste Tortoisevn. C'est exactement ce que je voulais, bien que je puisse simplement refaire le script SVN2Git, puis ajouter mes patchs à nouveau sur le dessus.



0
votes

J'ai trouvé une autre façon de le faire. J'ai de nouveau répondu à Svn2Git, obtenu un clone GIT plus mis à jour du référentiel SVN. Ensuite, dans mon ancien référentiel git, j'ai ajouté le clone plus récent comme une télécommande, la récupéra, puis utilisé git rebase svnclone2 / maître pour rejeter ma branche sur la branche SVN2Git nouvellement mise à jour.

Bien sûr, cela signifie que mes engagements qui ont été rebaissés ont le même temps de validation, mais ce n'est pas trop mauvais. C'est moins de travail que de faire des taches manuelles et, étant donné que ce référentiel git n'est toujours pas utilisé par personne autre que moi encore, je pourrais réécrire l'histoire sans vous soucier des conséquences. Mais ce n'est probablement pas une bonne solution en général; La meilleure chose à faire serait d'obtenir le committer d'origine pour obtenir un accès Git (il est un fan mercurial heh) et l'avoir commettre les patchs lui-même.


0 commentaires

16
votes

svn2git prend maintenant en charge cela avec --rebase. De la documentation (actuelle):

comme de svn2git 2.0 il y a un nouveau fonctionnalité pour tirer dans les derniers changements de SVN dans votre référentiel git Créé avec svn2git. Ceci est un manière de synchroniser, mais vous permet d'utiliser svn2git comme un outil de miroir pour votre Repositoyements SVN. P>

La commande à appeler est la suivante: p>

$ cd <EXISTING_REPO> && svn2git --rebase


0 commentaires

0
votes

Je pense que vous devriez utiliser Subgit au lieu de SVN2Git. Lorsque vous l'installez dans votre référentiel SVN

$ subgit install path/to/svn/repository


0 commentaires