web-dev-qa-db-fra.com

Comment appliquer le diff SVN à Git?

J'ai mes projets dans 2 référentiels. Un sous SVN et un sous Git. Chaque fois que je change quelque chose dans SVN, je veux faire la même chose dans le référentiel Git.

Supposons que je modifie le référentiel SVN en produisant la révision 125. Comment appliquer ces mêmes modifications à mon référentiel Git (en supposant que mon référentiel Git soit à jour avec la révision 124).

Je vous remercie.

48
drozzy

Ce que j'ai réellement fait/recherché était:

cd /path/to/svn/repo
svn diff -r 125 > /tmp/patch.diff
cd /path/to/git/repo
patch -p0 < /tmp/patch.diff
49
drozzy

Essayer:

svn diff | patch -d /path/to/git/repo -p0

Voir svn help diff si vous voulez exporter le diff d'une révision spécifique.

18
MattJ

Pourquoi personne n'aime git-svn? Je ne peux pas supposer que personne ne le sait.

Il y a git-svn (et git-hg et git-cvs et git-bzr afaict). Au moins avec git-svn vous pouvez simplement faire 

git svn clone --stdlayout http://myrepo/root here

l'utilisation de -s (--stdlayout) suppose l'utilisation du tronc/des branches/des balises/de la présentation standard, mais vous pouvez l'utiliser de n'importe quelle manière (man git-svn). 

Le mappage est bidirectionnel, vous pouvez donc pousser et tirer comme avec une télécommande native (git). Aucune question posée.

5
sehe

Si vous voulez générer un correctif dans SVN et l'appliquer ultérieurement avec Git, n'oubliez pas d'utiliser l'option de ligne de commande --git :

--git

Active un mode de sortie spécial pour svn diff conçu pour la compatibilité croisée avec le système populaire de contrôle de version distribuée Git .

Par exemple, exécutez

svn diff --git -r 125 > /tmp/patch.diff

4
bahrep

Outre l’utilisation du correctif mentionné ci-dessus, vous pouvez également envisager de configurer un hook post-commit afin que vous n’ayez pas à le faire à chaque nouvelle validation.

2
Federico Builes

Le dessous a fonctionné pour moi.

Source: Comment créer et appliquer un patch avec Git

Premièrement, jetez un coup d’œil aux modifications apportées au correctif . Vous pouvez le faire facilement avec git apply

git apply --stat fix_empty_poster.patch

Notez que cette commande NE FAIT PAS applique le patch, mais ne vous montre que les statistiques sur ce qu’il va faire. Après avoir jeté un coup d'œil dans le fichier de correctif avec votre éditeur favori, vous pouvez voir quels sont les changements réels.

Ensuite, vous êtes intéressé par le problème que posera le correctif . Git vous permet de tester le correctif avant de l'appliquer.

git apply --check fix_empty_poster.patch

Si vous n’obtenez aucune erreur, vous pouvez appliquer le correctif proprement ????. Sinon, vous risquez de voir les problèmes que vous rencontrerez. 

Pour appliquer le patch, je vais utiliser git am au lieu de git apply. La raison en est que git am vous permet de signer un patch appliqué. Cela peut être utile pour référence ultérieure.

git am --signoff < fix_empty_poster.patch

Applying: Added specs to test empty poster URL behaviour
Applying: Added poster URL as part of cli output

D'accord, les correctifs ont été appliqués proprement et votre branche principale a été mise à jour. Bien sûr, relancez vos tests pour vous assurer que rien n’a été cassé.

Dans votre journal Git, vous constaterez que les messages de validation contiennent une balise «Signed-Off-by». Cette balise sera lue par Github et d'autres utilisateurs pour fournir des informations utiles sur la manière dont la validation a été intégrée dans le code.

0
Abhishek Bedi