Cómo cierro una carpeta pero excluyo la subcarpeta .git

148

Intento crear un archivo zip desde una carpeta y me gustaría excluir la subcarpeta .git del archivo zip resultante.

He ido a la carpeta principal de la que quiero comprimir ( llamada bitvolution ) y estoy haciendo:

zip -r bitvolution.zip bitvolution -x ".git"

Pero no excluye la subcarpeta .git .

Probé varias combinaciones, -x .git* , -x \.git/* , -x .git/\* , -x \.git/\* . También intenté usar la ruta completa para el argumento exclude ... pero simplemente no llegué allí.

    
pregunta Tom 28.02.2011 - 21:38

5 respuestas

181

La expresión correcta es -x *.git* , por lo que el comando completo debería ser:

zip -r bitvolution.zip bitvolution -x *.git*

Una explicación de enlace :

  

El encantamiento correcto es

zip -9 -r --exclude=*.svn*  foo.zip [directory-to-compress]
     

También puede agregar un% --exclude=*.DS_Store* para excluir el molesto directorio de Mac OS X que muestra archivos de metadatos.

     

Observe que la expresión que se pasa a --exclude usa la ruta de directorio relativa original como la cadena original para hacer coincidir. Entonces .svn/* por sí mismo no funciona; el carácter comodín al frente asegura que coincida con los directorios .svn en cualquier lugar del árbol de directorios.

    
respondido por el Isaiah 28.02.2011 - 22:01
84

Si está intentando cerrar un proyecto que está almacenado en Git, use el comando git archive . Desde el directorio de origen:

git archive -o bitvolution.zip HEAD

Puede utilizar cualquier ID de confirmación o etiqueta en lugar de HEAD para archivar el proyecto en un determinado punto.

Si desea agregar un prefijo (por ejemplo, una carpeta de nivel superior) a cada archivo:

git archive -o bitvolution.zip --prefix=bitvolution/ HEAD

También puede ajustar el nivel de compresión entre 0 (sin compresión) y 9 (compresión máxima) inclusive, por ejemplo

git archive -o bitvolution.zip -9 HEAD

Para otras opciones, vea la página de ayuda ( git help archive ).

    
respondido por el Blair 14.12.2011 - 12:08
20

Agregué una barra invertida:

zip -r bitvolution.zip bitvolution -x \*.git\*

página de manual sobre barra invertida:

  

La barra diagonal inversa evita la sustitución del nombre del shell, por lo que el nombre   la coincidencia se realiza por zip en todos los niveles de directorio.

    
respondido por el Priit Tamboom 14.12.2011 - 11:13
4

Suponiendo que tienes instalado git en la máquina, estás haciendo esto, también puedes usar git para crear tu archivo.

git archive --format=zip HEAD -o bitvolution.zip
    
respondido por el Tatu Lahtela 14.12.2011 - 12:12
1

Si está usando zsh, el comando debería verse así:

zip -r target_name.zip source_dir -x '/*.git/*'

Si usa: zip -r target_name.zip source_dir -x /*.git/* . sin 'regex', zsh procesará antes de ejecutar zip. Aparecerá un mensaje de error:

zsh: no matches found: /*.git/*
    
respondido por el g10guang 08.06.2018 - 11:35

Lea otras preguntas en las etiquetas