Pregunta ¿Cómo puedo agregar un directorio vacío a un repositorio de Git?


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


3469
2017-09-22 16:41


origen


Respuestas:


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

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

Entonces no tienes que hacer el pedido de la manera que tienes que hacer en m104's solución.

Esto también le da la ventaja de que los archivos en ese directorio no aparecerán como "no rastreados" cuando haga un estado de git.

Fabricación @GreenAsJadecomentario persistente:

Creo que vale la pena señalar que esta solución hace exactamente lo que la pregunta solicitó, pero quizás no sea lo que muchas personas que buscan 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 "No tengo ningún archivo para registrar aquí, todavía, pero necesito el directorio aquí, los archivos pueden venir más tarde".


3359
2018-05-31 22:10



No puedes. Ver el Preguntas frecuentes sobre Git.

Actualmente el diseño del índice git   (área de ensayo) solo permite que los archivos   estar en la lista, y nadie lo suficientemente competente   para hacer el cambio para permitir vaciar   directorios se ha preocupado lo suficiente acerca de   esta situación para remediarlo.

Los directorios se agregan automáticamente   al agregar archivos dentro de ellos. Ese   es, los directorios nunca tienen que ser agregados   al repositorio, y no son rastreados   en su propia.

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

Si realmente necesita un directorio para   existir en las cajas debe crear un   archivo en ella. .gitignore funciona bien para   este propósito; puedes dejarlo vacío   o complete los nombres de los archivos que   esperar aparecer en el directorio.


981
2017-09-22 16:42



Crea un archivo vacío llamado .gitkeep en el directorio, y agregar eso.


594
2017-12-07 16:03



Siempre puede poner un archivo README en el directorio con una explicación de por qué quiere este, de lo contrario, vacío, directorio en el repositorio.


368
2018-03-14 23:38



touch .keep

En Linux, esto crea un archivo vacío llamado .keep. Este nombre es preferido sobre .gitkeep como el primero es agnóstico para Git, mientras que el último es específico para Git. En segundo lugar, como ha señalado otro usuario, el .git la convención de prefijos debe reservarse para los archivos y directorios que usa Git.

Alternativamente, como se señaló en otro responder, el directorio puede contener un descriptivo README o README.md archivo en lugar.

Por supuesto, esto requiere que la presencia del archivo no haga que su aplicación se rompa.


259
2018-01-29 04:29



¿Por qué necesitaríamos carpetas con versiones vacías?

Lo primero es lo primero:

Un directorio vacío no puede ser parte de un árbol bajo el sistema de control de versiones de Git.

Simplemente no será rastreado. Pero hay escenarios en los que "versionar" un directorio vacío puede ser útil, por ejemplo:

  • construyendo un estructura de carpetas predefinida para carpetas de proyectos útiles, y ponga esta estructura a disposición de cada usuario / colaborador del repositorio; o, como caso especializado de los anteriores, crear una carpeta para archivos temporales, como una cache/ o logs/ directorios
  • algunos proyectos simplemente no funcionará sin algunas carpetas (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).

Algunas soluciones sugeridas

Muchos usuarios sugieren:

  1. Colocando un README archivo u otro archivo con algún contenido para que el directorio no esté vacío, o
  2. Creando un .gitignore archivo con una especie de "lógica inversa" (es decir, para incluir todos los archivos) que, al final, cumple la misma función que el enfoque n.º 1.

Mientras Ambas soluciones seguramente funcionan Los encuentro inconsistentes con un enfoque significativo para el control de versiones de Git.

  • ¿Por qué se supone que debes poner archivos falsos o README que quizás no quieras en tu proyecto?
  • Por que usar .gitignore hacer una cosa (acuerdo archivos) que es todo lo contrario de lo que significa (Excluyendo archivos), a pesar de que es posible?

enfoque .gitkeep

Use una vacío archivo llamado .gitkeep para forzar la presencia de la carpeta en el sistema de control de versiones.

Aunque puede parecer una diferencia no tan grande:

  • Usas un archivo que tiene soltero propósito de mantener la carpeta. No colocas allí ninguna información que no quieras poner.

    Por ejemplo, debe usar README como, bueno, README con información útil, no como una excusa para guardar la carpeta.

    La separación de inquietudes siempre es algo bueno, y aún puede agregar un .gitignore ignorar archivos no deseados

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

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

Adopción

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


202
2017-12-04 23:32



Como se describe en otras respuestas, Git no puede representar directorios vacíos en su área de ensayo. (Ver el Preguntas frecuentes sobre Git.) Sin embargo, si, para sus propósitos, un directorio está lo suficientemente vacío si contiene un .gitignore solo archivo, entonces puedes crear .gitignore archivos en directorios vacíos solo a través de:

find . -type d -empty -exec touch {}/.gitignore \;

119
2018-05-03 15:17



Andy Lester tiene razón, pero si su directorio solo necesita estar vacío, y no vacío vacío, puedes poner un vacío .gitignore archivo allí como una solución alternativa.

Como un aparte, este es un problema de implementación, no un problema fundamental de diseño de almacenamiento Git. Como se ha mencionado muchas veces en la lista de correo de Git, la razón por la que esto no se ha implementado es que nadie se ha preocupado lo suficiente como para enviar un parche para ello, no es que no pueda o no deba hacerse.


57
2017-09-22 17:28



los Ruby on Rails camino:

mkdir log && touch log/.gitkeep && git add log/.gitkeep

Ahora el directorio de registro se incluirá en el árbol. Es súper útil cuando se implementa, por lo que no tendrá que escribir una rutina para crear directorios de registro.

Los archivos de registro pueden mantenerse fuera emitiendo,

echo log/dev.log >> .gitignore

pero probablemente lo sabías.


29
2017-10-22 13:24