2010-07-08 10 views
209

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

+5

posible duplicado de [Excepciones en .gitignore] (http://stackoverflow.com/questions/2415873/exceptions-in-gitignore) – wallyk

Respuesta

295

Uso:

*.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 incluirá nuevamente. Si un patrón negado coincide, esto anulará las fuentes de patrones de precedencia inferiores.

+12

Véase también formulario de respuesta @Matiss Jurgelis - es importante agregar – Dan

+6

¿Puedo agregar la excepción a ¿Mi gitignore de proyecto y no mi gitignore global? Por ejemplo, si quisiera incluir todas las DLL en un directorio? Mi gitignore_global tiene '* .dll' en él, y mi proyecto gitignore tiene'! Libs/*. Dll' pero eso no parece estar funcionando. – jkinz

+1

@jkinz, deberías probar '! Libs/**/*. Dll'. –

14

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

De acuerdo con la gitignore man page:

patrones tienen el siguiente formato:

...

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

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

.gitignore ignora sólo los archivos para el seguimiento y cosas habituales como git add .

+1

Solo para obtener más detalles, la '-f' le 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

+0

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

4

!foo.dll en .gitignore, o (cada vez!) git add -f foo.dll

11

Para excluir todo en un directorio, pero algunos subdirectorios, haga lo siguiente:

wp-content/* 
!wp-content/plugins/ 
!wp-content/themes/ 

Fuente: https://gist.github.com/444295

143

Git hace caso omiso de las carpetas si escribe:

/js 

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

Debe escribir:

/js/* 

y sólo entonces puede exceptuar subcarpetas como esta

!/js/jquery 
+11

** Eso es muy importante. ** ¡Gracias! – VisioN

+1

Esto no es una obviedad. – danger89

+2

Sin embargo, parece que no puede agregar carpetas anidadas, p. '!/js/jquery/xyzlib' no será ignorado ... – Ignorant

1

Dado que Git 2.7.0 Git tendrá en cuenta las excepciones. A partir de las notas de la versión oficial:

  • permitir que un después "!/ Abc/def" para anular una anterior '/ abc' que aparece en el mismo archivo .gitignore para que sea más fácil expresar 'todo en/abc directorio es ignorado, a excepción de ...'.

https://raw.githubusercontent.com/git/git/master/Documentation/RelNotes/2.7.0.txt

+0

hace que esto funcione para cualquier persona? no parece funcionar para mi – Ankur

1

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

  1. archivos/archivos en el mismo nivel: utilizar el @Skilldrick solution
  2. .
  3. Carpetas/Subcarpetas: use el @Matiss Jurgelis solution.
  4. archivos/archivos en diferentes niveles o archivos/subcarpetas: usted 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 
    
2

Si está trabajando con Visual Studio y el .dll que pasa a estar en una carpeta bin, luego tendrá que agregar una excepción para la carpeta bin 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 valor por defecto de Visual Studio .gitignore archivo incluye un patrón de ignorar para [Bbin]/

Este patrón zapping todas las carpetas bin (y por lo tanto su contenido), lo que hace que cualquier intento de incluir los contenidos redundantes (ya que la carpeta ya se ignoró).

que fue capaz de encontrar por qué mi archivo no se estaba ejecutando exceptúa

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

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

Cuestiones relacionadas