it-swarm.com.de

Wie wende ich SVN diff auf Git an?

Ich habe meine Projekte in 2 Repositories. Eine unter SVN und eine unter Git. Immer wenn ich etwas in SVN ändere, möchte ich dasselbe mit dem Git-Repository machen.

Angenommen, ich ändere das SVN-Repository und produziere die Revision 125. Wie würde ich die gleichen Änderungen auf mein Git-Repository anwenden (vorausgesetzt, mein Git-Repository ist mit Revision 124 auf dem neuesten Stand).

Vielen Dank.

48
drozzy

Was ich eigentlich gemacht habe/gesucht habe war:

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

Versuchen:

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

Siehe svn help diff, wenn Sie den Diff einer bestimmten Revision exportieren möchten.

18
MattJ

Warum mag niemand git-svn? Ich kann nicht davon ausgehen, dass niemand davon weiß.

Es gibt git-svn (und git-hg und git-cvs und git-bzr afaict). Zumindest mit git-svn kannst du das einfach tun 

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

die Verwendung von -s (--stdlayout) setzt Standard-Trunks/-Zweige/-Tags/-Layouts voraus, aber Sie können es auf beliebige Weise (man git-svn) haben. 

Das Mapping ist bidirektional, so dass Sie wie mit einer nativen (git) Remote-Fernbedienung Push und Pull ausführen können. Keine Fragen gefragt.

5
sehe

Wenn Sie einen Patch in SVN erstellen und später mit Git anwenden möchten, vergessen Sie nicht die Befehlszeilenoption --git :

--git

Aktiviert einen speziellen Ausgabemodus für svn diff, der für die Kreuzkompatibilität mit dem beliebten verteilten Versionskontrollsystem Von Git entwickelt wurde.

Zum Beispiel ausführen

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

4
bahrep

Neben der Verwendung von Patch wie oben erwähnt, können Sie auch einen post-commit-Hook einrichten, damit Sie dies nicht jedes Mal tun müssen, wenn Sie etwas Neues festlegen.

2
Federico Builes

Das Folgende arbeitete für mich.

Quelle: So erstellen und wenden Sie einen Patch mit Git an

Sehen Sie sich zunächst an, welche Änderungen im Patch enthalten sind . Das kannst du ganz einfach mit git anwenden

git apply --stat fix_empty_poster.patch

Beachten Sie, dass dieser Befehl DOES NOT den Patch anwendet, Ihnen aber nur die Statistiken zu dessen Funktion anzeigen. Nachdem Sie mit Ihrem bevorzugten Editor in die Patch-Datei eingesehen haben, können Sie die tatsächlichen Änderungen sehen.

Als nächstes sind Sie daran interessiert, wie schwierig der Patch sein wird . Mit Git können Sie den Patch testen, bevor Sie ihn tatsächlich anwenden.

git apply --check fix_empty_poster.patch

Wenn Sie keine Fehler erhalten, können Sie den Patch sauber anwenden ????. Andernfalls sehen Sie möglicherweise, auf welche Probleme Sie stoßen werden. 

Um den Patch anzuwenden, verwende ich git am und nicht git. Der Grund dafür ist, dass Sie mit git am einen angewandten Patch abmelden können. Dies kann für späteres Nachschlagen hilfreich sein.

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

Okay, Patches wurden sauber angewendet und Ihr Master-Zweig wurde aktualisiert. Führen Sie Ihre Tests natürlich erneut aus, um sicherzustellen, dass nichts beschädigt ist.

In Ihrem Git-Log finden Sie, dass die Festschreibungsnachrichten ein "Signed-off-by" -Tag enthalten. Dieses Tag wird von Github und anderen gelesen, um nützliche Informationen darüber zu erhalten, wie das Festschreiben im Code endete.

0
Abhishek Bedi