GIT SVN dcommit después de cambiar el nombre de la carpeta

No he podido encontrar una respuesta similar a mi pregunta.

Situación:

Localmente usando GIT (versión de git 1.7.3.1.msysgit.0)
El repository remoto es SVN (no estoy seguro de la versión)


Problema:

Clona un repository SVN, agrega una carpeta, encuéntralo en git y SVN, cambia el nombre de la carpeta (sin contar a git), comprométete con git, no puedes comprometer más con SVN.


Emitir pasos (el repository SVN tiene un file en main.as en la carpeta raíz)

  1. twig de clonación del repository SVN (ahora tiene un file localmente)
  2. comprometerse a git localmente (incluyendo git add . )
  3. crear oldFolder con un file en él
  4. comprometerse a git localmente (incluyendo git add . )
  5. comprometerse con SVN
  6. renombrar oldFolder -> newFolder (renombrar con IDE o manualmente – no git-mv )
  7. comprometerse con git localmente (incluido git-add . )
  8. Comprometerse con SVN (no necesita SVN rebase ya que soy el único que comete cambios a SVN)

PROBLEMA : El git-svn dcommit responde:

 oldFolder/file.txt: needs update update-index --refresh: command returned error: 1 

Lo que probé:

  • stash, commit, dcommit, stash apply (lo mismo: necesita actualización)
  • stash, rebase, stash apply, commit, dcommit (lo mismo: necesita actualización)
  • stash, rebase, stash apply, commit, stash, dcommit (lo mismo: necesita actualización)

El que semi-trabajó fue llamar:

 svn rm -r oldFolder 

pero esto terminó con oldFolder y newFolder en SVN … mientras que quiero que oldFolder sea ​​renombrado o eliminado (no me importa perder el historial en este caso).

Necesito el repo de SVN para reflejar mi maestro / twig git local …


¿Por qué estoy renombrando files sin el command git?
Trabajo con estructuras de files de gran tamaño y los IDEs que uso para refactorizar código antiguo cambian el nombre de varias carpetas y files causando el escenario anterior. No puedo hacer un seguimiento y llamar a git rm en cada carpeta eliminada.

En el paso 7, realizó la adición del nuevo file (newFolder / file.txt) pero no la eliminación del file anterior. Tendrá que hacer lo siguiente en lugar de los pasos 6 y 7 anteriores:

  1. renombrar oldFolder -> newFolder (renombrar con IDE o manualmente – no git-mv)
  2. git add newFolder
  3. git rm -r oldFolder
  4. cometer localmente

En este punto, git rastreará los cambios de nombre (si corresponde), y producirá una confirmación correcta para SVN.

Si su tree todavía está en el paso 7, puede hacer

 git reset --soft HEAD~ 

para volver al compromiso anterior y organizar la eliminación.

(Agregando otra respuesta solo para completar)

Un git add --all : todo agrega todas las modificaciones, incluidas las eliminaciones y los cambios de nombre.

Por lo tanto, la siguiente secuencia de commands generalmente "simplemente funciona", incluso en el caso de cambiar el nombre de las carpetas:

 git add --all git commit -m "some msg" git svn dcommit 

Realmente no necesitamos dar git rm -r OLD_FOLDER (a less que, por supuesto, cuando queremos ajustar la definición del índice Git).