Cómo eliminar la duplicación en git tree desde git-svn

Estoy usando gitsvn para rastrear un repository canónico de subversión. Mi repository local tenía los commits del svn, pero también twigs adicionales en las que estaba trabajando al mismo time, que no estaban en el repository de subversión.

Mi computadora vieja murió, y entonces estoy tratando de duplicar esa configuration en mi nueva computadora. Afortunadamente hice una copy de security de mi repository de git en un server, del que puedo clonar para get todas mis confirmaciones de git (incluidas las que no forman parte del SVN). Sin embargo, este tree no puede interactuar con git-svn porque no tiene los metadatos correctos. También puedo usar git-svn para iniciar un tree / git / new que coincida con los commit de SVN, pero git-svn crea un tree duplicado que está desconectado del rest de mi commit de git. Esto significa que no puedo simplemente usar el nuevo tree, porque perdería todas las confirmaciones de git que no son parte del SVN.

En resumen, mi tree se ve así:

ADA' |/ | BEB' |/ | CC'

donde ABC son los commits de git-svn de mi antigua computadora, A'B'C 'son los commits duplicates que git-svn crea en mi nueva computadora, y DE son varias commits que solo existen en el repository git de la vieja computadora ( no son parte del SVN).

¿Cómo puedo deduplicar estos treees, de modo que obtengo un solo tree con las confirmaciones adicionales correctamente conectadas, y que interactúen correctamente con el repository svn?

Tienes unas cuantas opciones:

A. git-svn repo <- git repo

Puede agregar el repository local desde la computadora anterior como un control remoto en el nuevo repository de git-svn . A partir de ahí, simplemente puede importar sus twigs antiguas simplemente obteniéndolas:

Del repository git-svn podrías hacer:

 git remote add backup C:\path\to\local\repo git fetch backup git checkout -t backup/your-old-branch git remote remove backup 

Dado que los hashes SHA-1 de commits son únicos en diferentes copys del mismo repository, sus antiguas twigs locales aún deberían basarse en la parte superior de los mismos commits en el repository git-svn recién inicializado.

B. git repo <- git-svn repo

Otra solución sería agregar los metadatos de git-svn al repository local desde la computadora anterior y luego search cualquier nueva confirmación del server SVN.

Del repository local podrías hacer:

 git svn init <svn-repo-url> git update-ref refs/remotes/git-svn refs/heads/master git checkout master git svn rebase 

El segundo command se asegura de que la reference de git-svn apunta a la punta de la twig master local. Luego, git svn rebase obtendrá cualquier nueva confirmación del repository SVN y actualizará la twig master local.