2012-03-13 22 views
8

Estoy usando git svn para trabajar con un cliente que tiene un repositorio svn (nuestro material está en github).git svn rebase siempre entra en conflicto con mis propios commits

Así que siga las instrucciones y hacer un git rebase svn y luego git svn dcommit

que funcionó la primera vez, pero desde entonces siempre rebase los conflictos en casi cada commit. Parece que no se da cuenta de cuáles compromisos son míos, y se queja de que las cosas son contradictorias. Cada vez que tengo que git rebase, sigo hasta que los aprueba y con éxito aplica mis últimos commits. Nunca se da cuenta de dónde estaba la última vez que hice una rebase (que creo que es lo que se supone que debe suceder).

Primero de todo ... ¿por qué? Entonces, ¿puedo solucionar esto de alguna manera?

First, rewinding head to replay your work on top of it... 
Applying: Deleting their old build management stuff as its pretty crappy. Will re-build at some point. 
Using index info to reconstruct a base tree... 
Falling back to patching base and 3-way merge... 
No changes -- Patch already applied. 
Applying: Added some error checking around Android specific calls 
Using index info to reconstruct a base tree... 
<stdin>:16: space before tab in indent. 
      Android.hideKeyboard(); 
<stdin>:31: space before tab in indent. 
        Android.launchNewAccount(); 
warning: 2 lines add whitespace errors. 
Falling back to patching base and 3-way merge... 
CONFLICT (modify/delete): src/LoginForm.js deleted in HEAD and modified in Added some error checking around Android specific calls. Version Added some error checking around Android specific calls of src/LoginForm.js left in tree. 
Auto-merging src/ChildPanel.js 
CONFLICT (content): Merge conflict in src/ChildPanel.js 
Failed to merge in the changes. 
Patch failed at 0002 Added some error checking around Android specific calls 

When you have resolved this problem run "git rebase --continue". 
If you would prefer to skip this patch, instead run "git rebase --skip". 
To check out the original branch and stop rebasing run "git rebase --abort". 

Respuesta

7

No sé cómo se metió en esta situación, pero puedo decirle cómo salir.

Primero, cree una nueva rama basada en el SVN ascendente: git checkout -b mynewbranch refs/remotes/oldbranch (use la ID de git-svn ref aquí).

Entonces, compruébalo: git checkout mynewbranch.

Por último, cereza-escoge las confirmaciones de su nueva sucursal que no estaban comprometidos con SVN (algo así como git cherry-pick refs/remotes/oldbranch..oldbranch.

La causa más probable de los problemas que estamos viendo es que reescribiste después de empujar la historia un cambio a SVN; cuando usa git-svn para realizar una confirmación, pone el git-svn-iden el registro de confirmación, que cambia el hash de revisión. Si luego mueve la confirmación, comienza a trabajar en un universo alternativo donde las versiones de SVN conflicto con los locales no SVN.

+1

Haha. Amo tu línea de apertura. Voy a dar una oportunidad, gracias! –

+1

Supongo que por git-svn ref ID te refieres al nombre de la rama 'remotes/git-svn'? –

+1

Er ... git co no es un comando. git checkout supongo? (Solo me aseguro de que no estoy usando git svn en ese momento) –

Cuestiones relacionadas