файлы соответствия gitignore с префиксом и суффиксом в подкаталоге - PullRequest
3 голосов
/ 13 января 2012

Мне нравится отслеживать только файлы, которые начинаются с "es" и заканчиваются * .h или * .m

так что я попробовал это:

#exlude all
*
#except
!es*.h
!es*.m

и

#exlude all
*
#except
!*/es*.h
!*/es*.m

, но ни один из них не работает для файлов в подкаталогах

1 Ответ

2 голосов
/ 13 января 2012

Когда вы игнорируете все (*), вы игнорируете папки, даже если они тоже имеют содержимое, так как * соответствует всему.

Если вы игнорируете что-то, это будет соответствовать только для файлов корневого каталога.Если вам нужно игнорировать каталог, вам нужно явно сказать это (то есть !mydir/).Но это приведет к игнорированию всего содержимого этого каталога, поэтому вам придется переопределить шаблон игнорирования / игнорирования содержимого этого каталога.Даже если вы сделаете это, если вы еще не добавили dir в индекс, вы не увидите этого в git status.

Ваш случай может быть легко решен, но инвертированный шаблон.
В основном вы хотите игнорировать все, что

  • не начинается с es , а
  • не заканчивается .h или .m.

Сделайте так:

$ ls -a
.  ..  .git  .gitignore  a  b  blah  c  ebar.m  esfoo.h  esfoo.m  sbar.m
$ ls -a blah/
.  ..  a  b  c  ebar.m  esfoo.h  esfoo.m  sbar.m
$ git status -s
?? blah/
?? esfoo.h
?? esfoo.m
$ git status -s blah/   # matching files ignored and also ignored on `git add`
?? blah/esfoo.h
?? blah/esfoo.m
$ git add .
$ git status -s         # only wanted files were added
A  blah/esfoo.h
A  blah/esfoo.m
A  esfoo.h
A  esfoo.m
$ cat .gitignore        # the ignore pattern -- ignore
[^e]*                   # everything that doesn't start with 'e'
e[^s]*                  # and is not followed by an 's'
*.[^hm]                 # and does not end with '.h' or '.m'
!/blah                  # uningore the wanted subdirs

Как вы видите в последней команде, я инвертировал ваш шаблон, чтобы игнорировать все, что не начинается с e ине сопровождается s, и это не заканчивается .h или .m, а также игнорирует dir.Несмотря на то, что каталог имел больше содержимого, он игнорировался, поскольку соответствовал шаблону, и добавлялись только нужные части.

edit : обновлено

...