мерзавец игнорировать исключение - PullRequest
279 голосов
/ 08 июля 2010

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

Ответы [ 9 ]

394 голосов
/ 08 июля 2010

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

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

С gitignore :

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

200 голосов
/ 06 февраля 2013

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

/js

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

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

/js/* 

и только тогда вы можете, кроме таких подпапок, как это

!/js/jquery
52 голосов
/ 08 июля 2010

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

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

15 голосов
/ 03 мая 2012

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

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

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

14 голосов
/ 08 июля 2010

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

Согласно справочной странице gitignore :

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

...

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

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

3 голосов
/ 01 мая 2017

Если вы работаете с 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]/.

2 голосов
/ 09 ноября 2016

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

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

    *.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
    
1 голос
/ 06 января 2016

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

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

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

...