Tengo un archivo gitignore que hace que git ignore los *.dll
archivos, 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?
Tengo un archivo gitignore que hace que git ignore los *.dll
archivos, 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?
Respuestas:
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.
*.dll
, y el gitignore de mi proyecto tiene !Libs/*.dll
pero eso no parece estar funcionando.
!Libs/**/*.dll
.
!**/Libs/*.dll
, dependiendo de la estructura de la carpeta.
!foo.dll
que invalida el comando. Si agrego el comentario en una fila separada, funciona.
Git ignora las carpetas si escribes:
/js
pero no puede agregar excepciones si lo hace:
!/js/jquery
o !/js/jquery/
o!/js/jquery/*
Debes escribir:
/js/*
y solo entonces puedes excepto subcarpetas como esta
!/js/jquery
!/js/jquery/xyzlib
, no será ignorado ...
/js/*
, !/js/jquery
, /js/jquery/*
, !/js/jquery/xyzlib
? Se siente como una forma bastante divertida de hacerlo ...
Puedes simplemente git add -f path/to/foo.dll
.
.gitignore
ignora solo los archivos para el seguimiento habitual y cosas como git add .
-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
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
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.
!foo.dll
en .gitignore, o (¡cada vez!) git add -f foo.dll
Si está trabajando con Visual Studio y su bin
archivo .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 .gitignore
archivo 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.
La solución depende de la relación entre la regla de ignorar git y la regla de excepción:
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
Desde Git 2.7.0 Git tendrá en cuenta las excepciones. De las notas oficiales de lanzamiento:
- Permita que un "! / Abc / def" posterior anule un "/ abc" anterior que aparece en el mismo archivo .gitignore para que sea más fácil expresar "todo en el directorio / abc se ignora, excepto ...".
https://raw.githubusercontent.com/git/git/master/Documentation/RelNotes/2.7.0.txt