2010-01-02 7 views
11

Tengo un repositorio de aproximadamente 24 MB de tamaño, pero los archivos del proyecto son en realidad de solo 2 MB. Tenía la impresión de que un clon superficial con --depth 1 me reduciría casi los 2MB de los archivos reales (sin repositorio completo).¿Por qué este clon de git superficial es más grande de lo que esperaba?

Cuando hago el clon superficial el nuevo repositorio muestra solo la rama actual pero el tamaño es idéntico (24MB) y mirando el repositorio con gitx puedo ver todo el historial de nuevo en la confirmación inicial.

Me gustaría obtener una forma de obtener solo el estado actual de los archivos (para cargar en un servidor) sin todo el historial. ¿Estoy haciendo algo mal o simplemente estoy malinterpretando el propósito del clon superficial?

+0

¿Qué versión de Git o msysgit estás usando? Porque este hilo (http://osdir.com/ml/git/2009-02/msg02816.html) dice: no hay repositorio. – VonC

+0

Estoy usando 1.6.5 (del paquete binario) en leopardo de las nieves. – kjs3

+0

El clon es local por cierto. – kjs3

Respuesta

20

Si esto es un clon local, entonces el clon puede estar operando al vincular los objetos en su nuevo repositorio a aquellos en su antiguo repositorio (lo hace como una optimización en los sistemas de archivos locales). Para ver si este es el caso, puede desactivar el enlace duro:

git clone --depth 1 --no-hardlinks /path/to/repo.git 

Si usted está tratando de obtener el estado actual de los datos para cargar a un servidor, debe utilizar git archive para generar una postal o alquitrán archivo de tu árbol.

+1

la opción --no-hardlinks no parece hacer ninguna diferencia, pero "archivo Git" es perfecto. Gracias – kjs3

0
git clone --depth 1 repo_url 

debe hacer lo que desee.

¿Tal vez puso las opciones después de repo url? En algún sistema serían ignorados.

+0

Tenía las opciones antes de la url. No dados. – kjs3

+0

Probablemente deberías leer la pregunta antes de tratar de publicar una respuesta. – mpowered

1

Como dije en el comentario, esto es extraño porque generalmente no es reproducible (ver this thread).

Ejemplo de comando que debería funcionar:

$ git clone --depth 1 git://github.com/rails/rails.git shallow 
Initialized empty Git repository in /home/me/shallow/.git/ 

Pero de todos modos, en grandes repositorios, la ganancia lograda con un clon sin profundidad seems not very impressive

4

Sugiero que sea porque al hacer un clon local, git ignora --depth porque favorece los enlaces duros. Puede forzar el comportamiento esperado con la especificación del repositorio de origen con file:///home/user/path/to/repo (es decir, con el prefijo file: ///).

Esto está en los documentos.

Cuestiones relacionadas