¿Moviendo el SVN histórico se compromete con el repository existente de Github?

Hace un time, trasladé un repository de Subversion a Git y github cuando decidí utilizar Open Source en algún software, y no estoy seguro de lo que hice, pero el historial de commit no se movió. En ese momento pensé que no me importaba, pero ahora creo que me gustaría mucho más los 2+ años de compromisos en Github, aunque solo sea por un logging de esfuerzo laboral. El problema es que mi proyecto ha estado en Github por un time y se ha bifurcado y recibido confirmaciones desde que se creó.

¿Hay alguna manera de "respaldar" los compromisos históricos de mi antiguo repository, y ponerlos en el repository viviente, respirando Github?

Nota: Intenté a medias svn2git --rebase pero no estoy seguro si esto funcionará teniendo en count que ha habido commits desde que se retiró el svn repo. Recibí este error y no estoy seguro de lo que significa:

  command failed: 2>&1 git svn fetch 

La ascendencia en git no es más que una confirmación (que es un file de text) que contiene una o más líneas que leen el parent <hash of parent commit> . Si desea insert el historial antes de su primer commit, necesitaría una línea padre como esta (los primeros commits no tienen uno), y eso cambiaría el hash del primer commit, lo que significaría que su (s) descendiente (s) necesitarían cambiar el padre pointers, y esto va de forma recursiva a través de todas las confirmaciones, ya que todos descienden del primer compromiso del repository.

Si no te preocupa estropear a la gente que trabaja en las horquillas (porque cambiarás el historial de tu proyecto), entonces puedes volver a hacer la operación para crear un segundo repo de git del historial antiguo, agregar ese repo como un control remoto a su nuevo repository, y busque los cambios, ahora tendrá dos raíces en su nuevo repository. Puede recibir una advertencia sobre no comprometer en común; esto esta bien. Ahora puede ver el historial para orientarse: git log --all --graph --oneline --decorate , luego probablemente haga una rebase --onto para mover el nuevo trabajo del repository sobre la historia del repository anterior que acaba de traer in. Presumiblemente, el tree en la primera confirmación de su nuevo repository será idéntico al tree en el último repository anterior, por lo que puede ser tan simple como: git rebase --onto ABC , donde A es el último compromiso en la historia del repository anterior, que acabas de traer, B es la primera confirmación en el nuevo repository (que aquí se considera la "base antigua" del nuevo repository, que no se está reescribiendo en la historia anterior, porque debería ser idéntico, y C , que es el jefe de la sucursal en el nuevo repository en el que desea volver a basar, probablemente master .

Sus repositorys pueden ser más complicados que eso, y es posible que necesite hacer más trabajo para descubrir exactamente dónde está la costura para volver a unir las cosas, pero esa es la idea general. Ahora puede git remote rm newrepo , "newrepo" siendo lo que usted denominó el control remoto al agregarlo. Eso debería aclarar la segunda raíz y todas las confirmaciones realizadas. Finalmente, puedes forzar empujar esto a github. Esto habrá cambiado literalmente en cada hash de confirmación, por lo que ninguna de las horquillas funcionará, pero tendrás todo el historial, y la gente podría simplemente clonar nuevamente, o reset --hard al nuevo master para recuperar la copy de security. Probablemente desee informar a todos de esto en su página de repositorys, y tal vez encontrar a las personas que los bifurcaron y alertarlos sobre sus intenciones.