Как добавить что-то в .gitignore, чтобы совпадение не было рекурсивным?

Как мне добавить что-то к .gitignore, чтобы совпадение не было рекурсивным?

Например, я хочу игнорировать каталог foo и файл bar.txt в текущем каталоге, но не существующие в подкаталогах.

Я пробовал это для своего файла .gitignore:

foo/
bar.txt

Но, к сожалению, git применяет это рекурсивно, так что otherdir/bar.txt и otherdir/foo/ также игнорируются, а это не то, чего я хочу.

(Есть ли в git команда, которая показывает мне все игнорируемые файлы и ссылается на файл .gitignore, который отвечает за игнорирование файла? Это было бы полезно для отладки.)


person pauldoo    schedule 19.03.2010    source источник


Ответы (2)


Решение состоит в том, чтобы поставить косую черту перед записями .gitignore:

/foo/
/bar.txt

(Я думал, что попробовал это перед публикацией на StackOverflow, но, очевидно, я не пробовал это должным образом, так как это работает отлично.)

person pauldoo    schedule 19.03.2010
comment
Возможно, вы пробовали это и где-то были начальные/конечные пробелы, которые, как сообщается, вызывают проблемы с .gitignore. Кто знает, в любом случае этот вопрос помог мне, лол - person Bender the Greatest; 12.04.2013

Из справочной страницы gitignore:

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

Итак, !* в качестве первой строки в вашем .gitignore очистит все предыдущие шаблоны.

person hermannloose    schedule 19.03.2010
comment
Хорошо, очевидно, я все время делал вещи гораздо более сложным образом:] +1 за главный ответ с косой чертой, пока не могу проголосовать. - person hermannloose; 19.03.2010
comment
+1, так что вы можете проголосовать прямо сейчас :) Кроме того, я не знал о ! префикс. - person David V.; 19.03.2010