¿Cómo agrego un directorio vacío a un repositorio Git?

Resuelto Laurie Young asked hace 16 años • 37 respuestas

¿Cómo agrego un directorio vacío (que no contiene archivos) a un repositorio Git?

Laurie Young avatar Sep 22 '08 23:09 Laurie Young
Aceptado

Otra forma de hacer que un directorio permanezca (casi) vacío (en el repositorio) es crear un .gitignorearchivo dentro de ese directorio que contenga estas cuatro líneas:

# Ignore everything in this directory
*
# Except this file
!.gitignore

Entonces no es necesario que realice el pedido correctamente como debe hacerlo en la solución de m104 .

Esto también brinda el beneficio de que los archivos en ese directorio no aparecerán como "sin seguimiento" cuando realice un estado de git.

Hacer persistente el comentario de @GreenAsJade :

Creo que vale la pena señalar que esta solución hace precisamente lo que pedía la pregunta, pero quizás no sea lo que muchas personas que hayan analizado esta pregunta habrán estado buscando. Esta solución garantiza que el directorio permanezca vacío. Dice "Realmente nunca quiero que los archivos se registren aquí". A diferencia de "Todavía no tengo ningún archivo para registrar aquí, pero necesito el directorio aquí, es posible que los archivos lleguen más tarde".

Jamie Flournoy avatar May 31 '2009 22:05 Jamie Flournoy

No puedes. Consulte las preguntas frecuentes sobre Git .

Actualmente, el diseño del índice git (área de preparación) solo permite enumerar archivos, y nadie lo suficientemente competente para realizar el cambio para permitir directorios vacíos se ha preocupado lo suficiente por esta situación como para remediarla.

Los directorios se agregan automáticamente al agregar archivos dentro de ellos. Es decir, nunca es necesario agregar directorios al repositorio y no se les realiza un seguimiento por sí solos.

Puede decir " git add <dir>" y agregará archivos allí.

Si realmente necesita que exista un directorio en las cajas, debe crear un archivo en él. .gitignore funciona bien para este propósito; puede dejarlo vacío o completar los nombres de los archivos que espera que aparezcan en el directorio.

Andy Lester avatar Sep 22 '2008 16:09 Andy Lester

Cree un archivo vacío llamado .gitkeepen el directorio y git add.

Este será un archivo oculto en sistemas tipo Unix de forma predeterminada, pero obligará a Git a reconocer la existencia del directorio, ya que ahora tiene contenido.

También tenga en cuenta que no hay nada especial en el nombre de este archivo. Podrías haberle puesto el nombre que quisieras. Lo único que le importa a Git es que la carpeta tenga algo dentro.

Artur79 avatar Dec 07 '2011 16:12 Artur79

Siempre puede colocar un archivo README en el directorio con una explicación de por qué desea este directorio, que de otro modo estaría vacío, en el repositorio.

John Mee avatar Mar 14 '2011 23:03 John Mee
touch .placeholder

En Linux, esto crea un archivo vacío llamado .placeholder. Por si sirve de algo, este nombre es independiente de git, y este enfoque se utiliza en varios otros lugares del sistema, por ejemplo /etc/cron.d/.placeholder. En segundo lugar, como señaló otro usuario, la .gitconvención de prefijo se puede reservar para archivos y directorios que el propio Git utiliza con fines de configuración.

Alternativamente, como se indica en otra respuesta , el directorio puede contener un archivo README.mddescriptivo .

De cualquier manera, esto requiere que la presencia del archivo no provoque que su aplicación se rompa.

Asclepius avatar Jan 29 '2014 04:01 Asclepius

¿Por qué necesitaríamos carpetas versionadas vacías?

Lo primero es lo primero:

Un directorio vacío no puede formar parte de un árbol en el sistema de versiones de Git .

Simplemente no será rastreado. Pero hay escenarios en los que "controlar versiones" de directorios vacíos puede ser significativo, por ejemplo:

  • crear una estructura de carpetas predefinida , poniéndola a disposición de todos los usuarios/colaboradores del repositorio; o, como caso especializado de lo anterior, crear una carpeta para archivos temporales , como directorios cache/o logs/, donde queremos proporcionar la carpeta pero .gitignoresu contenido.
  • En relación con lo anterior, algunos proyectos no funcionarán sin algunas carpetas (lo que a menudo es un indicio de un proyecto mal diseñado, pero es un escenario frecuente en el mundo real y tal vez podría haber, por ejemplo, problemas de permisos que abordar).

Algunas soluciones sugeridas

Muchos usuarios sugieren:

  1. Colocar un READMEarchivo u otro archivo con algún contenido para que el directorio no esté vacío, o
  2. Crear un .gitignorearchivo con una especie de "lógica inversa" (es decir, incluir todos los archivos) que, al final, cumple el mismo propósito que el enfoque n.° 1.

Si bien ambas soluciones seguramente funcionan, las encuentro inconsistentes con un enfoque significativo para el control de versiones de Git.

  • ¿Por qué se supone que debes colocar archivos falsos o README que tal vez no quieras en tu proyecto?
  • ¿Por qué .gitignorehacer algo ( mantener archivos) que es todo lo contrario de lo que está destinado ( excluir archivos), aunque sea posible?

enfoque .gitkeep

Utilice un archivo vacío llamado .gitkeeppara forzar la presencia de la carpeta en el sistema de versiones.

Aunque pueda parecer que no es una diferencia tan grande:

  • Utiliza un archivo que tiene el único propósito de conservar la carpeta. No pones allí ninguna información que no quieras poner.

    Por ejemplo, debería utilizar archivos README como archivos README con información útil, no como excusa para conservar la carpeta.

    La separación de preocupaciones siempre es algo bueno y aún puede agregar una .gitignorepara ignorar archivos no deseados.

  • Nombrarlo .gitkeepdeja muy claro y directo desde el nombre del archivo en sí (y también para otros desarrolladores , lo cual es bueno para un proyecto compartido y uno de los propósitos principales de un repositorio Git) que este archivo es

    • Un archivo no relacionado con el código (debido al punto inicial y al nombre)
    • Un archivo claramente relacionado con Git
    • Su propósito ( mantener ) está claramente establecido y es consistente y semánticamente opuesto en su significado de ignorar.

Adopción

He visto el .gitkeepenfoque adoptado por marcos muy importantes como Laravel , Angular-CLI .

Cranio avatar Dec 04 '2013 23:12 Cranio