tag repositorio origin example eliminar crear actualizar git cvs git-svn git-cvs

repositorio - git push origin master



¿Cómo importar y mantener actualizado un repositorio de CVS en Git? (3)

Con la versión más reciente, git cvsimport está roto, debido a la incompatibilidad de la herramienta cvsps .

Entonces debes instalar cvsps-2.1 .

En OSX puedes (tener brew ):

brew tap homebrew/versions brew install cvsps2 brew unlink cvsps brew link --overwrite cvsps2

E importar en el repositorio vacío de git como de costumbre, por ejemplo:

git cvsimport -C RepoName -r cvs -o master -k -v -d:pserver:[email protected]:/cvsroot/path ModuleName

También puede usar la herramienta cvs2git , que puede convertir un repositorio de CVS a git. Sin embargo, debe tener acceso a un directorio CVSROOT.

Verifique la cvs2git para conocer los pasos de instalación.

Ejemplo de uso:

cvs2git --blobfile=git-blob.dat --dumpfile=git-dump.dat --username=cvs2git /path/to/cvs/repo

Esto crearía dos archivos de salida en formato de importación rápida de git. Los nombres de estos archivos están especificados por su archivo de opciones o argumentos de línea de comandos. En el ejemplo, estos archivos se llaman cvs2git-tmp/git-blob.dat y cvs2git-tmp/git-dump.dat .

Estos archivos se pueden importar al repositorio de git vacío de la siguiente manera:

cat git-blob.dat git-dump.dat | git fast-import

A continuación, elimine la rama TAG.FIXUP y ejecute gitk --all para ver los resultados de la conversión.

Busque más, ejecutando: cvs2git --help .

Hay un repositorio central en CVS, y me gustaría usarlo con Git localmente, y luego enviar mis cambios a CVS.

¿Qué puedo lograr eso diariamente?

Las tareas que me gustaría lograr son:

  • ramas de importación,
  • obteniendo la historia en formato GIT, y
  • exportando mis cambios / confirmaciones al servidor centralizado

Por cierto, también he analizado las mejores prácticas para usar git con CVS . Pero no funcionó y no pude averiguar qué me perdí o qué hice mal.


Creo que no hay una receta lista para usar en su caso. Pero puedes intentar lo siguiente:

  • Sincronización manual de datos de CVS con Git, o escribir scripts para eso. Obtendrán información de CVS y la enviarán a Git. Esto te dará un poco de historia en Git. No completamente limpio, no completamente utilizable, pero aún así.
  • Migre su repositorio de CVS a Git usando cvs2git como git cvsimport . Y pídale a Git que pretenda ser CVS para otros desarrolladores, usando git cvsserver .

Lo que he hecho en el pasado es:

Importar el repositorio de CVS

Utilizando:

$ git cvsimport -C target-cvs -r cvs -k -vA authors-file.txt -d $CVSROOT module

Dónde:

  • target-cvs es el directorio para guardar mi copia local del repositorio.
  • cvs es el nombre que se debe usar para hacer referencia al repositorio remoto. Por lo tanto, tendré cvs/master , cvs/HEAD , etc. apuntados localmente por el master .
  • authors-file.txt es el archivo que contiene las coincidencias entre la cuenta CVS y Name + email, cada línea contiene userid=User Name <useremail@hostname>
  • $CVSROOT es el servidor de repositorio de CVS. Si uso una clonación anónima desde algún repositorio de sourceforge, entonces usaría :pserver:anonymous@project_name.cvs.sourceforge.net:/cvsroot/project_name
  • module es el módulo dentro del repositorio que quiero clonar. Si el repositorio tiene solo un módulo, es probable que sea el mismo que project_name .

Actualiza el repositorio

Es posible repetir el comando que escribí previamente. En ese ejemplo particular, debe ejecutarse en el directorio principal de target-cvs . Para hacerlo más fácil en el futuro, es posible que desee configurar algunas variables (puede leer más detalles en la respuesta de " Cómo exportar el historial de revisión de mercurial o git a cvs? " )

$ git cvsimport

Eso sería suficiente para mantener el repositorio local en git sincronizado con el remoto en CVS.

Trabajo diario

A partir de ahora, cada cambio debería ir en una sucursal local de git. Una característica, una rama. Para esto, uso un flujo de trabajo descrito en " Un modelo de ramificación de Git exitoso ". La única diferencia es que el maestro apunta a CVS, pero conceptualmente los mismos flujos de trabajo se pueden aplicar aquí. Es solo una convención.

Una vez que su compromiso se inserta en CVS, volverá a ser maestro en la próxima actualización ( git cvsimport ). Luego, puede eliminar la sucursal local que implementó esa función.

Para el trabajo en progreso (en sucursales locales), debe rebase a rebase una base contra el maestro. Debido a que tiene las funciones separadas, debería ser más fácil resolver conflictos. La parte difícil es cuando algunas ramas dependen de otras, pero aún son manejables. Micro commits ayuda mucho (como en cualquier flujo de trabajo git).

Si cada rama local se actualiza y el maestro nunca se toca (excepto las actualizaciones), entonces git cvsexportcommit debería funcionar. Recuerde, funciona para un compromiso. Es un poco tedioso, pero es mejor que nada. Dado el ejemplo anterior, el comando debería ser algo así como:

$ git cvsexportcommit -vc commit-id

Si solo tiene acceso de solo lectura al CVS remoto, puede enviar los parches por correo electrónico o hacer que su repositorio git sea público, para que los commiters puedan tomar sus parches para aplicarlos. Nada diferente de un flujo de trabajo normal de CVS en este caso. Nuevamente, en la próxima actualización verá los cambios en el maestro .