svn git git-svn

import svn repository to git



¿Autores retroactivamente correctos con Git SVN? (3)

Comience por ver lo que tiene que limpiar:

git shortlog -s

Para cada uno de esos nombres, cree una entrada en un script que se vea así (suponiendo que desea que todos los autores y committers sean los mismos):

#!/bin/sh git filter-branch --env-filter '' n=$GIT_AUTHOR_NAME m=$GIT_AUTHOR_EMAIL case ${GIT_AUTHOR_NAME} in user1) n="User One" ; m="[email protected]" ;; "User Two") n="User Two" ; m="[email protected]" ;; esac export GIT_AUTHOR_NAME="$n" export GIT_AUTHOR_EMAIL="$m" export GIT_COMMITTER_NAME="$n" export GIT_COMMITTER_EMAIL="$m" ''

Ese es básicamente el guión que utilicé recientemente para una reescritura grande que fue muy similar a la que describió (excepto que tuve un gran número de autores).

editar Utilizar π señaló un problema de cotización en mi script. ¡Gracias!

Tengo un repositorio que ya he clonado desde SVN. He estado trabajando en este repositorio en su forma Git y odiaría perder esa estructura clonando de nuevo. Sin embargo, cuando originalmente cloné el repositorio, no pude especificar correctamente la propiedad svn.authors (o una opción similar semánticamente). ¿Hay alguna forma de que pueda especificar las asignaciones de autor SVN ahora que el repositorio está completamente modificado? Preferiblemente, me gustaría corregir a todos los autores de confirmaciones anteriores para que representen al autor de Git en lugar del nombre de usuario de SVN sin formato.


Probablemente desee examinar git-filter-branch , específicamente la opción --commit-filter . Este comando es una poderosa motosierra que puede reescribir todo el historial de repositorios, cambiando lo que sea que desee cambiar.

Tenga en cuenta que cuando hace esto, debe extraer clones nuevos del repositorio actualizado ya que los valores hash SHA1 de cada confirmación pueden haber cambiado.


git filter-branch se puede usar para reescribir grandes fragmentos de historial.

En este caso, probablemente harías algo así como (totalmente no probado):

git filter-branch --env-filter '' GIT_AUTHOR_NAME=`echo "${GIT_AUTHOR_NAME}" | sed -e "s/svnname1/Right Name/; s/svnname2/Correct Name/"` GIT_COMMITTER_NAME=`echo "${GIT_COMMITTER_NAME}" | sed -e "s/svnname1/Right Name/; s/svnname2/Correct Name/"` GIT_AUTHOR_EMAIL=`echo "${GIT_AUTHOR_EMAIL}" | sed -e "s/svnname1/[email protected]/; s/svnname2/[email protected]/"` GIT_COMMITTER_EMAIL=`echo "${GIT_COMMITTER_EMAIL}" | sed -e "s/svnname1/[email protected]/; s/svnname2/[email protected]/"` ''

Como siempre, se aplica lo siguiente: para reescribir el historial, necesita una conspiración .