2012-04-17 9 views
9

Heredé un proyecto almacenado en CVS. El desarrollador anterior tiene cambios masivos no comprometidos en su directorio de trabajo, incluyendo la eliminación de una tonelada de archivos, que me gustaría inspeccionar. Aquí está mi plan:¿Puedo copiar .git a otro directorio?

  1. cvs checkout the_project.
  2. Siga the remote cvs/local git workflow, inicializando un git repo con el estado prístino del_proyecto.
  3. Copie el nuevo .git en el otro directorio de trabajo.
  4. Presto! Todas las eliminaciones/cambios aparecen como diferencias no registradas.

Al principio parece que va a funcionar. ¿Alguna dificultad importante de la que debería preocuparme?

+1

Creo que esto es lo mismo que eliminar todos los archivos de la copia de trabajo de Git y pegar archivos del repositorio de CVS. Esto debería funcionar y mostrarle todos los cambios que se han realizado. – Tadeck

Respuesta

4

Hago algo similar todo el tiempo. Uso GIT para rastrear múltiples lanzamientos y múltiples ramas de un gran proyecto SVN. El proyecto tiene ~ 200 módulos SVN cada uno en un subdirectorio de 'src'. Cuando comencé el repositorio GIT, revisé v9.4.4 del proyecto, hice un 'git init' agregado .gitignore y .gitattributes, hice un 'git add -A' y 'git commit -m' v9.4.4 '. Entonces I moví .git fuera del proyecto y creé un enlace simbólico a él. Cuando apareció la versión v9.4.5, lo comprobé, agregué un enlace simbólico al directorio .git ahora compartido, agregué .gitignore y .gitattributes, hice un 'git add -A' y 'git commit -m' v9. 4.5 '. En este punto, tengo un repositorio GIT simbólicamente vinculado desde dos directorios.

Con esta configuración puede realizar cualquier operación de git que no toque el directorio de trabajo. Entonces, para mi aplicación, 'git diff v9.4.4..v9.4.5' funciona muy bien. Por supuesto, también puede hacer operaciones git que sí tocan el índice y el directorio de trabajo, pero luego debe tener cuidado de que ese repositorio esté en la confirmación correcta para el lanzamiento en el que está sentado.

También he usado esto para múltiples ramas. En ese caso, es fundamental utilizar 'git symbolic-ref HEAD refs/heads/a-branch' para cambiar la rama sin tocando el directorio de trabajo. Así que cuando apareció mi versión de proyecto s3, hice una 'git branch s3 v9.4.4', creé mi enlace simbólico .git, hice 'git symbolic-ref HEAD refs/heads/s3' y lo seguí con 'add' y 'cometer.'

+0

Gracias por describir su experiencia concreta. – chreekat

0

Sí, eso funcionaría. Por supuesto, usted también puede hacer lo opuesto: elimine todo excepto el .git y pegue los archivos de otros lugares.

2

Esto debería funcionar sin problemas, pero es posible que desee intentar ejecutar git fsck --full para verificar la conectividad y la validez de los objetos en la base de datos después de hacer eso. En comparación, también vea la pregunta sobre el desbordamiento de pila "Can I copy a Git working copy onto another machine?". Es un escenario ligeramente diferente, pero es relativamente comparable.

Cuestiones relacionadas