git ignore / * и! / ** / somefile * не исключают должным образом - PullRequest
1 голос
/ 21 марта 2019

мой каталог git-репозиторий, подобный этому:

--ignore_dir/
----dir2/
------ignorea3.txt
----aaa.txt
----ignorea2.txt
--ignorea1.txt
--ignore1.txt
--.gitignore

.gitignore файл, подобный этому:

/*
!/**/ignorea*.txt

с git status, вывод:

On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        ignorea1.txt

nothing added to commit but untracked files present (use "git add" to track)

Мой вопрос, почему он не отслеживает файлы: ignore_dir/dir2/ignorea3.txt и ignore_dir/ignorea2.txt

Спасибо!

ОБНОВЛЕНИЕ
Спасибо @RomainValeri и @ torek,
Я получил сложный способ добиться этого, отредактировав файл gitignore:

/*
!/ignore_dir/
/ignore_dir/*
!/ignore_dir/dir2/

/ignore_dir/dir2/*
!/ignore_dir/dir2/ignorea*.txt
!/ignore_dir/ignorea*.txt

Он дает явное отслеживание каждого каталога родительского уровня ignorea*.txt.

Кроме того, это будетне работает:

/*
!**/ignorea*.txt

Надеюсь, кто-то может дать элегантный способ!

1 Ответ

1 голос
/ 21 марта 2019

Из doc :

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

(выделено мной)

Итак, так как каталоги ignore_dir и dir2 исключены первым шаблоном, повторное включение файлов внутри них в следующей строке не будет работать.


Неудачная попытка:

# ignore eveything
/*

# reintroduce "ignore_dir" directory
!/ignore_dir

# reintroduce "dir2" directory
!/ignore_dir/dir2

# reintroduce any ignorea*.txt file in any directory
!/**/ignorea*.txt

Но как torek упоминает ниже , это не работает.Быть улучшенным.

...