2009-06-30 33 views
7

que estoy haciendo algo de trabajo para localizar a un error percibido en una herramienta de apoyo Git, y quiero copiar un repositorio (posiblemente muchas veces) con fines experimentales. Me gustaría que los enlaces duros se creen en la base de datos de objetos del repositorio original para no desperdiciar espacio en el disco y almacenar copias múltiples de objetos idénticos con valores de SHA idénticos. git clone lleva a cabo esta muy bien, pero por desgracia parece que no puede encontrar una manera de hacer git clone dame una nueva copia del archivo establecido como el repositorio original:¿Cómo copio/clono un repositorio git sin perder espacio?

  1. los puntos de la copia en el repositorio copiado como su origen, pero yo quiero que tenga el mismo origen que el repositorio copiado
  2. el clon termina con una sola rama, pero yo quiero que tenga todas las ramas del repositorio de copiado

I puede mejorar algo de esto usando git clone --mirror, pero eso solo funcionará para crear un repositorio vacío, y el repositorio que estoy experimentando on no es simple, y la herramienta de soporte que estoy tratando de depurar no funciona en repositorios simples.

Pensé en escribir un bucle de shell rápido para hacer una nueva base de datos de objetos llena de enlaces duros a la base de datos de objetos original, y luego copiar todo lo demás fuera del directorio .git original, y luego hacer una comprobación de git, pero estoy preocupado porque esto es lo suficientemente complicado como para ser propenso a errores y que no sé lo suficiente para realizar este tipo de cirugía de bajo nivel correctamente y construirá un repositorio con errores sutiles. ¿Debería funcionar este enfoque, en teoría?

Mejor aún, ¿hay una manera de pasar opciones a git clone para que haga lo que yo quiero?

¿Hay alguna manera de crear un nuevo repositorio, pero decirle que su base de datos objeto está en otro directorio, básicamente diciendo que compartir la base de datos objeto del repositorio original?

Si ninguno de los trabajos anteriores, entonces yo me quedo con sólo una -PR CP, que se va a consumir una gran cantidad de espacio y llevar mucho tiempo.

Respuesta

5

creo que estás buscando

git clone --reference=/path/to/existing/repo url 

En la jerga git esta conocido como el uso de "suplentes". Existen posibles problemas con esta opción, como se menciona en el git clone help, pero puede adaptarse a sus propósitos.

Puede que le interesen también ayudante de Dustin git-alternates.

0

Usa "git clone --mirror", luego cámbialo de un repositorio desnudo a uno no desnudo (cambia el nombre de repo.git a repo/.git, copia el archivo .git/config, revisa el directorio de trabajo usando "git checkout HEAD") Nota: ¡No revisé si funciona como estaba previsto!

0

clon de git uso con la opción --no-check out. Actualice el repositorio de git con git fetch en lugar de git pull para evitar el pago.

Cuestiones relacionadas