git ignora la excepción


326

Tengo un archivo gitignore que hace que git ignore los *.dllarchivos, y ese es realmente el comportamiento que quiero. Sin embargo, si quiero una excepción (es decir, para poder comprometerme foo.dll), ¿cómo puedo lograr esto?


8
posible duplicado de Excepciones en .gitignore
wallyk

fwiw, el abuelo de las respuestas duplicadas sobre este tema, una que debería revisar, probablemente sería Hacer que .gitignore ignore todo excepto algunos archivos , actividad muy regular y varias buenas respuestas. Soy un fanático particular de esta respuesta , que parece clara y exhaustiva.
Kay V

Respuestas:


447

Utilizar:

*.dll    #Exclude all dlls
!foo.dll #Except for foo.dll

De gitignore :

Un prefijo opcional! que niega el patrón; cualquier archivo coincidente excluido por un patrón anterior se volverá a incluir. Si un patrón negado coincide, esto anulará las fuentes de patrones de precedencia inferior.


22
Vea también el formulario de respuesta @Matiss Jurgelis - es una adición importante
Dan

77
¿Puedo agregar la excepción al gitignore de mi proyecto y no a mi gitignore global? Por ejemplo, si quisiera incluir todas las DLL en un directorio? Mi gitignore_global tiene *.dll, y el gitignore de mi proyecto tiene !Libs/*.dllpero eso no parece estar funcionando.
Joel Kinzel el

1
@jkinz, deberías intentarlo !Libs/**/*.dll.
Rosberg Linhares

@RosbergLinhares O !**/Libs/*.dll, dependiendo de la estructura de la carpeta.
JAB

2
Gracias, pero en una Mac agregando el comentario en la misma línea !foo.dllque invalida el comando. Si agrego el comentario en una fila separada, funciona.
Giacomo

261

Git ignora las carpetas si escribes:

/js

pero no puede agregar excepciones si lo hace: !/js/jqueryo !/js/jquery/o!/js/jquery/*

Debes escribir:

/js/* 

y solo entonces puedes excepto subcarpetas como esta

!/js/jquery

44
Eso es muy importante ¡Gracias!
VisioN

3
Sin embargo, parece que no puede agregar carpetas anidadas, por ejemplo !/js/jquery/xyzlib, no será ignorado ...
Ignorante

2
Como dice @Ignorant, la carpeta que "excepto" de la regla de ignorar, debe estar en la misma ubicación que el "*"
The Red Pea

3
por lo que /js/*, !/js/jquery, /js/jquery/*, !/js/jquery/xyzlib? Se siente como una forma bastante divertida de hacerlo ...
Imperishable Night

Realmente me ayudaste.
Loyea

55

Puedes simplemente git add -f path/to/foo.dll.

.gitignore ignora solo los archivos para el seguimiento habitual y cosas como git add .


44
Solo para más detalles, -fle dice a git que fuerce la adición de este archivo en el repositorio, ya que podría ignorarlo primero debido a su.gitignore
RPDeshaies

Lo cual es genial si solo tiene un archivo, menos útil si necesita un patrón
Liam


15

Simplemente agregue !antes de una regla de exclusión.

Según la página de manual de gitignore :

Los patrones tienen el siguiente formato:

...

  • Un prefijo opcional! que niega el patrón; cualquier archivo coincidente excluido por un patrón anterior se volverá a incluir. Si un patrón negado coincide, esto anulará las fuentes de patrones de precedencia inferior.


4

Si está trabajando con Visual Studio y su binarchivo .dll se encuentra en una carpeta, deberá agregar una excepción para la carpeta bin en particular, antes de poder agregar la excepción para el archivo .dll. P.ej

!SourceCode/Solution/Project/bin
!SourceCode/Solution/Project/bin/My.dll

Esto se debe a que el .gitignorearchivo predeterminado de Visual Studio incluye un patrón de ignorar para[Bbin]/

Este patrón está eliminando todas las carpetas bin (y, en consecuencia, su contenido), lo que hace que cualquier intento de incluir el contenido sea redundante (ya que la carpeta en sí ya se ignora).

Pude encontrar por qué mi archivo no se exceptúa al ejecutar

git check-ignore -v -- SourceCode/Solution/Project/bin/My.dll

desde una ventana de Git Bash. Esto devolvió el [Bbin]/patrón.


2

La solución depende de la relación entre la regla de ignorar git y la regla de excepción:

  1. Archivos / Archivos en el mismo nivel: use la solución @Skilldrick .
  2. Carpetas / Subcarpetas: use la solución @Matiss Jurgelis .
  3. Archivos / Archivos en diferentes niveles o Archivos / Subcarpetas: puede hacer esto:

    *.suo
    *.user
    *.userosscache
    *.sln.docstates
    
    # ...
    
    # Exceptions for entire subfolders
    !SetupFiles/elasticsearch-5.0.0/**/*
    !SetupFiles/filebeat-5.0.0-windows-x86_64/**/*
    
    # Exceptions for files in different levels
    !SetupFiles/kibana-5.0.0-windows-x86/**/*.suo
    !SetupFiles/logstash-5.0.0/**/*.suo
    

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.