2010-05-12 2 views
59

Я пытаюсь использовать файл .gitignore с отрицательными шаблонами (строки, начинающиеся с!), Но он не работает так, как я ожидаю.Как работают отрицательные шаблоны в .gitignore?

Как минимальный пример, у меня есть folllowing структуру каталогов:

C:/gittest 
-- .gitignore 
-- aaa/ 
    -- bbb/ 
    -- file.txt 
    -- ccc/ 
    -- otherfile.txt 

и в моем файле gitignore, у меня есть это:

aaa/ 
!aaa/ccc/ 

Мое понимание (на основе this doc page) является то, что файл aaa/ccc/otherfile.txt не следует игнорировать, но на самом деле git игнорирует все под aaa.

Я не понимаю этого предложения: «Необязательный префикс!», Который отрицает шаблон, любой соответствующий файл, исключенный предыдущим шаблоном, снова будет включен ».?

Кстати, это на Windows с msysgit 1.7.0.2.

ответ

104

Я думаю, что вы на самом деле хотите сделать это:

aaa/* 
!aaa/ccc 

Вы хотите сказать, это «не смотрите в aaa», так что даже не рассматривает путь aaa/ccc. Если вы используете подстановочные, он все еще читает содержимое aaa, то каждая запись соответствует подстановочные и игнорируется, за исключением aaa/ccc, который получает положить обратно.

+2

это не сработало для меня .... – iconoclast

+2

@iconoclast: Тогда вы, вероятно, делаете что-то другое. Отправьте другой вопрос (с полной информацией), если вы хотите получить помощь. – Cascabel

+0

Это не сработало для меня: /apps/* !/Apps/myApps/FluidTest/bin/ –

10

Если вы хотите, чтобы исключить все в aaa, но включают в себя aaa/ccc и все под ним, вы должны использовать:

aaa/* 
!aaa/ccc 
!aaa/ccc/* 

Первая строка говорит мерзавца игнорировать Everthing под aaa, второй говорит это не игнорировать папку aaa/ccc, которая на самом деле «позволяет» третья строка, которая затем говорит, что не игнорировать все под aaa/ccc.

+1

Третья строка не имела для меня никакого значения. –

+1

Чтобы иметь возможность включать все в любой подкаталог 'aaa/ccc' на любом уровне, то, что сработало для меня, было'! Aaa/ccc/** 'вместо'! Aaa/ccc/* ' – boclodoa

1

Если кто-то еще не видит новые незапланированные предметы в git status, работающие с git update-index, прежде чем рука может помочь git, чтобы увидеть изменения (по крайней мере, в версии 1.9.x из gitbash).

Смежные вопросы