Gitgit-svn


Observaciones

Clonando repositorios SVN realmente grandes

Si el historial de repositorios SVN es realmente grande, esta operación podría llevar horas, ya que git-svn necesita reconstruir el historial completo del repositorio SVN. Afortunadamente, solo necesitas clonar el repo SVN una vez; Al igual que con cualquier otro repositorio de git, puede copiar la carpeta de repositorio a otros colaboradores. Copiar la carpeta a varias computadoras será más rápido que solo clonar grandes repositorios SVN desde cero.

Sobre commit y SHA1

Sus confirmaciones de git locales se reescribirán cuando use el comando git svn dcommit . Este comando agregará un texto al mensaje de confirmación de git que hace referencia a la revisión SVN creada en el servidor SVN, lo cual es muy útil. Sin embargo, agregar un nuevo texto requiere modificar un mensaje de confirmación existente que no se puede hacer realmente: las confirmaciones de git son inmutables. La solución es crear un nuevo compromiso con el mismo contenido y el nuevo mensaje, pero técnicamente es un nuevo compromiso de todos modos (es decir, el SHA1 del git commit cambiará)

Como las confirmaciones de git creadas para git-svn son locales, ¡los ID de SHA1 para las confirmaciones de git son diferentes entre cada repositorio de git! Esto significa que no puede usar un SHA1 para hacer referencia a un compromiso de otra persona porque el mismo compromiso tendrá un SHA1 diferente en cada repositorio de git local. Debe confiar en el número de revisión svn que se anexa al mensaje de confirmación cuando empuja al servidor SVN si desea hacer referencia a una confirmación entre diferentes copias del repositorio.

Sin embargo, puede usar el SHA1 para las operaciones locales (mostrar / diferencia un compromiso específico, selecciones y reinicios, etc.)

Solución de problemas

El comando git svn rebase emite un error de suma de comprobación

El comando git svn rebase produce un error similar a este:

  Checksum mismatch: <path_to_file> <some_kind_of_sha1>
  expected: <checksum_number_1>
    got: <checksum_number_2>

La solución a este problema es restablecer svn a la revisión cuando el archivo con problemas se modificó por última vez, y hacer un git svn fetch para que se restaure el historial de SVN. Los comandos para realizar el reinicio de SVN son:

  • git log -1 - <path_to_file> (copie el número de revisión de SVN que aparece en el mensaje de confirmación)
  • git svn reset <revision_number>
  • git svn fetch

Debería poder empujar / extraer datos de SVN nuevamente

El archivo no se encontró en la confirmación Cuando intenta obtener o extraer de SVN, aparece un error similar a este

<file_path> was not found in commit <hash>

Esto significa que una revisión en SVN está intentando modificar un archivo que, por algún motivo, no existe en su copia local. La mejor manera de deshacerse de este error es forzar una búsqueda ignorando la ruta de ese archivo y se actualizará a su estado en la última revisión de SVN:

  • git svn fetch --ignore-paths <file_path>

git-svn Ejemplos relacionados