2010-11-18 16 views
4

Ich habe etwas Code in einem Git-Repository, das mit einem SVN-Repository synchronisiert werden muss. Mein Rezept sieht so aus:Von Git zu SVN: Fehler beim Zusammenführen der Änderungen

  1. Erstellen Sie ein SVN-Repository (lokal, zum Testen, wird ein Remote sein).
  2. Erstes Layout erstellen, Commit 1 Revision
  3. git svn clone -T '/trunk' <REPO> ein neues Git-Repository basierend auf dem initialen Commit.
  4. git remote add dev <ORIGINAL> gefolgt von einem git pull dev <ORIGINAL_BRANCH>. Jetzt habe ich meinen Master-Zweig im Repository basierend auf dem anfänglichen SVN-Commit.
  5. git svn rebase, die von dcommit gefolgt würde. jedoch

Schritt 5) nicht mit:

Using index info to reconstruct a base tree... 
Falling back to patching base and 3-way merge... 
Auto-merging X 
Applying: Y 
Applying: Z 
Using index info to reconstruct a base tree... 
<stdin>:269: trailing whitespace. 

<stdin>:315: trailing whitespace. 

<stdin>:400: trailing whitespace. 
    * Method 2.6. Returns zero or two elements 
<stdin>:3762: trailing whitespace. 

warning: 4 lines add whitespace errors. 
Falling back to patching base and 3-way merge... 

von einem paar Gefolgt von „Auto-Zusammenführung“ und „KONFLIKT (Inhalt)“ -Nachrichten das Fütterungsmaterial schließlich stoppt mit einem freundlichen „Fehlern beim Zusammenführen in die Veränderungen". Was kann ich tun, damit diese Konflikte automatisch gelöst werden? Ich verstehe nicht einmal, wie Konflikte beim Rebasing entstehen können!

Antwort

1

Ich gebe auf und verwende stattdessen set-tree. Ein git rebase -p führt zu einer Geschichte mit den künstlichen git-svn Anfängen an der Wurzel zu begehen, gefolgt von dem Anfang aus der ursprünglichen Git-Repository begehen ...

Für Vollständigkeit meiner Referenzen für die drei Ansätze versucht:

  1. http://code.google.com/p/support/wiki/ImportingFromGit-git rebase
  2. http://markpasc.livejournal.com/186297.html - git svn rebase
  3. http://repo.or.cz/w/nagiosplugins.git?a=blob;f=tools/git2svn.pl-set-tree
3

Konflikte sind Konflikte, und git kann sie niemals wirklich für Sie lösen. Nur ein Mensch kann mit Sicherheit sagen, welche von zwei sich gegenseitig ausschließenden Modifikationen die richtige ist.

Warum können Sie während einer Rebase Konflikte bekommen? Es ist wirklich die gleiche Art von Operation wie eine Zusammenführung, was nur zu einer anderen Geschichte führt. Angenommen, Sie rebase X begehen auf D hier zu begehen:

- A - B - C - D 
    \ 
    X 

Der resultierende Gehalt gleich sein sollte, als ob Sie D in X. fusionierte Wenn es in etwas B begehen, die mit einer Änderung in Konflikt gemacht in begehen X gibt es Merge-Konflikte werden. Es spielt keine Rolle, ob Sie eine Fusion oder Rebasing betreiben.

+0

Aber wie können Konflikte auftreten, wenn ich auf einen einzigen Commit rebase, der nur drei Verzeichnisse hinzufügt (das SVN-Standardlayout)? – yawn

+1

@yawn: Nun, was sind die Konflikte? Sie müssen einige Inhalte neu erstellen. – Cascabel

+0

Ich denke, die Konflikte resultieren aus früheren Zusammenführungen - etwas entlang dieser Rebase könnte mit Zusammenführungen kollidieren, die mit einem Commit gelöst wurden? – yawn

Verwandte Themen