que emigraron a git utilizando git-svn. Nuestro repositorio svn todavía está intacto y todavía tenemos todo el "genialidad git". Esencialmente, después del clon git-svn, lo bifurca nuevamente como su 'tronco'. Todos los que usen git se ramificarán desde aquí. Cuando necesite obtener actualizaciones de svn, simplemente haga git-svn rebase y luego haga git merge --squash desde la rama svn al nuevo 'trunk'. Y viceversa. Esto significará que su historial en el repositorio svn no coincidirá con lo que está en git. Cuando haces más de una combinación, en algún momento tendrás que comenzar a realizar confirmaciones de injerto porque la historia no coincide. Sin embargo, si injertas la CABEZA de tu tronco de git en la última identificación de confirmación que fue una combinación aplastada, obtendrás el mismo efecto.
Ok así que vamos a descomponerlo lo mejor que pueda con un ejemplo.
SVN repo: SVN: //xyz.com/myproject
git svn clone svn://xyz.com/myproject
Esto debe salir con una configuración git-svn normal con una rama principal que tiene la misma historia como el repositorio SVN.
git checkout -b git_trunk
git_trunk se convierte en el "tronco" de los usuarios de git.
Esta rama se puede usar libremente como cualquier otro repositorio git.
Ahora tiene que sincronizar estos dos ramas a través de git fusionar --squash
Por ejemplo .. la fusión de la rama SVN maestro para git_trunk
git checkout git_trunk
git merge --squash master
git commit -a
Se podría hacer lo mismo con el fin de combinar desde git_trunk al maestro sVN excepto usted ejecutaría
git svn dcommit
Esto empujará de nuevo a sVN.
Así que la parte complicada aquí es que ya que estamos utilizando --squash la historia de fusiones se pierde y el único ancestro común git sabrá nunca es el punto de ramificación. Esto significará fusionar conflictos.La forma en que lo resolví fue haciendo algo como esto
Fusionando de git_trunk a la maestra. Primero tomo la identificación de commit de la última squash en git_trunk. Vamos a llamarlo ABCDEFG. Luego recibo el commit-d de git_trunk. Digamos que su HIJKLMNO
echo "HIJKLMNO ABCDEFG" > .git/info/grafts
Esto le dirá cuando la fusión de Git que el ancestro más común es aplastado los más recientes se comprometen.
No es perfecto, pero funciona muy bien para mí. Especialmente ahora ya que casi todos están en git.
Realmente no debería recibir problemas de subversión como ese. El repositorio de Subversion que administramos en el trabajo es bastante grande (más de 10.000 archivos) y nunca hemos tenido problemas de corrupción con él. Suena más como un problema de hardware, las corrupciones arbitrarias nunca deberían suceder. – Kezzer
Supongo que su repositorio no es usado por no programadores :) Pueden romper cualquier cosa. – vava
@vava: los no programadores podrían romper su _copia de trabajo_ y perder enormes cantidades de trabajo, pero definitivamente no deberían poder romper el _repositorio_. Algo parece estar sospechoso allí y si fuera tú, trataría de descubrir cómo sucede esto antes de hacer cualquier otra cosa. – sbi