Git игнорировать исключение

У меня есть файл gitignore, который делает файлы git ignore *.dll, и это на самом деле поведение, которое я хочу. Однако, если я хочу исключение (т.е. Иметь возможность зафиксировать foo.dll), как я могу это достичь?

Ответ 1

Использование:

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

От gitignore:

Дополнительный префикс! что отрицает шаблон; любой сопоставимый файл, исключенный предыдущим шаблоном, снова будет включен. Если совпадающий шаблон совпадает, это приведет к переопределению источников с более низким приоритетом.

Ответ 2

Git игнорирует папки, если вы пишете:

/js

но он не может добавлять исключения, если вы это делаете: !/js/jquery или !/js/jquery/ или !/js/jquery/*

Вы должны написать:

/js/* 

и только тогда вы можете исключить подпапки, подобные этому

!/js/jquery

Ответ 3

Вы можете просто git add -f path/to/foo.dll.

.gitignore игнорирует только файлы для обычного отслеживания и прочее, например git add .

Ответ 4

Просто добавьте ! перед правилом исключения.

В соответствии с страница gitignore:

Шаблоны имеют следующий формат:

...

  • Дополнительный префикс! что отрицает шаблон; любой сопоставимый файл, исключенный предыдущим шаблоном, снова будет включен. Если совпадающий шаблон совпадает, это приведет к переопределению источников с более низким приоритетом.

Ответ 5

Чтобы исключить все в каталоге, но некоторые подкаталоги, выполните следующие действия:

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

Источник: https://gist.github.com/444295

Ответ 6

!foo.dll в .gitignore или (каждый раз!) git add -f foo.dll

Ответ 7

Решение зависит от отношения между правилом игнорирования git и правилом исключения:

  • Файлы/файлы на одном уровне: используйте @Skilldrick решение.
  • Папки/подпапки: используйте решение @Matiss Jurgelis.
  • Файлы/файлы на разных уровнях или файлы/подпапки: вы можете сделать это:

    *.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
    

Ответ 8

Если вы работаете с Visual Studio, а ваша .dll находится в папке bin, вам нужно добавить исключение для самой папки bin, прежде чем вы сможете добавить исключение для. dll. Например.

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

Это связано с тем, что файл Visual Studio .gitignore по умолчанию содержит шаблон игнорирования для [Bbin]/

Этот шаблон блокирует все папки bin (и, следовательно, их содержимое), что делает попытку включить избыточность содержимого (поскольку сама папка уже игнорируется).

Мне удалось найти, почему мой файл не был освобожден, запустив

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

из окна Git Bash. Это вернуло шаблон [Bbin]/.

Ответ 9

Так как Git 2.7.0 Git будет принимать во внимание исключения. Из официальных релизов:

  • Разрешить более поздний "!/abc/def" переопределить предыдущий "/abc", который появляется в том же файле .gitignore, чтобы было легче выразить "все в каталоге /abc игнорируется, кроме...".

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