¿Qué es exactamente .gitignore?

212

Acabo de crear un repositorio de Github y me preguntaba para qué era el .gitignorearchivo. Comencé por no crear uno, pero agregué uno debido al hecho de que la mayoría de los repositorios tienen uno. ¿Necesito tener uno? ¿Puedo / lo ignoro, o tiene algún uso? Investigué un poco sobre el tema pero no pude encontrar una explicación concreta.

Zahachos
fuente

Respuestas:

175

.gitignorele dice a git qué archivos (o patrones) debe ignorar. Por lo general, se usa para evitar comprometer archivos transitorios de su directorio de trabajo que no son útiles para otros colaboradores, como productos de compilación, archivos temporales que crean IDE, etc.

Puede encontrar los detalles completos aquí .

Mureinik
fuente
Entonces, si crea un .gitignore en un nuevo repositorio en github.com, y luego hace un git init y git add . en su computadora local, aún no está conectado a .gitignore, ya que aún no está conectado a ese repositorio, ¿cómo funciona? ¿Tiene efecto cuando realizo un git commit? ¿O?
Xonatron
para que _._gitignoresirve ¿se usa solo cuando gitignore está en un subdirectorio?
Saikat Chakrabortty
¿Entonces permanece localmente, pero no se empuja al origen? Entonces, si algún usuario descarga el repositorio de github, ¿ese archivo secreto también se descarga?
Conoce a Zaveri
¿Qué significa ignorar ? ¿A quién / qué / cuándo ignora? Sé lo que significa la palabra ignorar, pero no encuentro una descripción clara de lo que significa ignorar en el contexto de Git. Obviamente, el término es totalmente comprensible para las personas que lo entienden, pero cualquier cosa escrita para definir algo para las personas que aún no lo saben necesita explicar todos los términos que tienen definiciones únicas para el contexto.
user34660
1
@ user34660 Ignorar significa solo eso: Git no rastreará los cambios en los archivos especificados por (los patrones) en el .gitignorearchivo. Incluso si los cambia, git no los mostrará como modificados.
Mureinik
42

Es una lista de archivos que desea que git ignore en su directorio de trabajo.

Digamos que estás en una Mac y tienes archivos .DS_Store en todos tus directorios. Desea que git los ignore, por lo que agrega .DS_Store como una línea en .gitignore. Y así.

Los documentos de git le dirán todo lo que necesita saber: http://git-scm.com/docs/gitignore

Andy Lester
fuente
2
Su .DS_Storeescenario finalmente resonó conmigo, ya que supongo que no me estaba aferrando a este concepto porque aún no había necesitado usarlo en un proyecto. Gracias. Terminé usando esto como punto de partida, ya que uso todos los sistemas operativos diferentes, señalando específicamente la # OS generated files #sección.
phoenixlaef
2
Sé que llego tarde a este hilo, pero gracias @AndyLester! Soy un novato cuando se trata de programación y Github. Creo que muchas de las respuestas escritas para abordar este tipo de preguntas están llenas de términos que el principiante podría no entender (es decir, productos de compilación, archivos temporales que los IDE crean ... ¡qué demonios son estas cosas!). Sin embargo, su descripción de Mac es perfecta en su elegante simplicidad.
Vesuccio
21

Cuando realiza una confirmación, no desea incluir accidentalmente archivos temporales o crear carpetas específicas. Por lo tanto, use una .gitignorelista de elementos que desea ignorar de la confirmación.

Además, lo más importante git status es uno de los comandos más utilizados donde desea git statusenumerar los archivos que se han modificado.

Desearía que su git statuslista se vea limpia de archivos no deseados. Por ejemplo, cambié a.cpp, b.cpp, c.cpp, d.cpp & e.cppQuiero que mi git statuslista lo siguiente:

git status
a.cpp
b.cpp
c.cpp
d.cpp
e.cpp

No quierogit status enumerar archivos modificados como este con los archivos y archivos de objetos intermedios de la carpeta de compilación

git status
a.cpp
b.cpp
c.cpp
d.cpp
e.cpp
.DS_Store
/build/program.o
/build/program.cmake

Por lo tanto, para liberarme de la git statuslista de estos archivos temporales intermedios y comprometerlos accidentalmente en el repositorio, debería crear uno .gitignoreque todos hagan. Todo lo que necesito hacer es enumerar los archivos y carpetas en los .gitignoreque quiero excluir del compromiso.

Siguiente es mi .gitignorepara evitar cometer archivos innecesarios

/*.cmake
/*.DS_Store
/.user
/build
programador_de_las_galaxias
fuente
7

Hay archivos en los que no desea que Git se registre. Git ve cada archivo en su copia de trabajo como una de tres cosas:

  1. rastreado: un archivo que se ha preparado o confirmado previamente;
  2. sin seguimiento: un archivo que no se ha preparado o confirmado; o
  3. ignorado: un archivo que a Git se le ha dicho explícitamente que ignore.

Los archivos ignorados generalmente son artefactos creados y archivos generados por máquina que pueden derivarse de la fuente del repositorio o que, de lo contrario, no deberían confirmarse. Algunos ejemplos comunes son:

  • cachés de dependencia, como el contenido de /node_moduleso/packages
  • código compilado, tales como .o, .pycy .classarchivos
  • directorios de salida de construcción, como por ejemplo /bin, /outo/target
  • archivos generados en tiempo de ejecución, como por ejemplo .log, .locko.tmp
  • archivos ocultos del sistema, como .DS_StoreoThumbs.db
  • archivos de configuración IDE personales, como .idea/workspace.xml

Los archivos ignorados se rastrean en un archivo especial llamado .gitignoreque se registra en la raíz de su repositorio. No existe un comando explícito de ignorar git: en su lugar, el .gitignorearchivo debe editarse y confirmarse a mano cuando tenga nuevos archivos que desee ignorar. .gitignoreLos archivos contienen patrones que coinciden con los nombres de archivo en su repositorio para determinar si deben ser ignorados o no. Aquí hay un archivo de muestra.gitignore . Para más detalles mira este enlace

imk
fuente
5

Propósito principal de .gitignore: para evitar agregar archivos irrelevantes, etc. Git

Tengo muchas notas / garabatos personales en ciertos repositorios: son útiles para mí pero no para nadie más. No quisiera que se cargara en github porque simplemente confundiría a todos los que lo lean. Lo bueno es que puedo pedirle a git que "ignore" esos archivos. El único costo para este enfoque es que no podré recuperar esas notas si mi computadora falla, etc.

BKSpurgeon
fuente