Git игнорировать файлы значков из-за значка? правило

У меня есть репо, которое включает SVG-изображения в каталоге icons/. Попытка добавления этих изображений в репо завершается с ошибкой, а Git жалуется на сообщение об ошибке:

The following paths are ignored by one of your .gitignore files:
public/img/icons/my-icon.svg
Use -f if you really want to add them.

Когда я отслеживал проигнорированные файлы с помощью git-check-ignore, я обнаружил, что правило Icon? из моего файла .gitignore_global является виновником.

$ git check-ignore -v public/img/icons/my-icon.svg 
/Users/ryanatallah/.gitignore_global:42:Icon?   public/img/icons/my-icon.svg

Что может быть элегантным решением этой проблемы?

Ответ 1

Оказывается, эта проблема вызвана Git ошибка, где правило Icon? gitignore также соответствует каталогам, таким как icons/, Решение состоит в том, чтобы написать правило с правильным символом управления (который является возвратом каретки) в конце. Этот вопрос объясняет, что файлы Icon? автоматически создаются для каталогов с пользовательскими значками.

Решение, описанное в this blogpost, должно правильно написать правило в мой глобальный файл gitignore с возвратом каретки. Следующий Ruby script выполняет трюк:

>> f = File.open(".gitignore", "a+") # append
=> #<File:.gitignore>
>> f.write("Icon\r\r")
=> 8
>> f.close
=> nil 

Ответ 2

Чтобы переопределить правила из родительского файла .gitignore, вам нужно использовать префикс !, например добавить в локальный файл .gitignore:

!Icon