Во-первых, стоит упомянуть о хитрости, связанной с игнорированием шаблонов файлов: если они содержат начальную или встроенную косую черту, они применяются к нескольким компонентам имен, но если нет, они применяются к одному компоненту имени (в любом каталоге Git).это рекурсивно, в то время).Это правило применяется после удаления завершающего слеша, если он есть, поэтому файл .gitignore
, содержащий:
abc
def/ghi
, игнорирует все файлы (и каталоги) с именем abc
которые происходят из этой точки «вниз», игнорируя только def/ghi
, что происходит в этой точке.Вторая строка в точности эквивалентна /def/ghi
.
Можно ли настроить git на использование полных путей при игнорировании чего-либо?
Нет.Шаблоны Gitignore относятся либо к каталогу, в котором находится файл игнорирования (для большинства файлов .gitignore
), либо к корню проекта (для .git/info/exclude
и вашему личному файлу игнорирования).То есть предположим, что проект находится в /home/arron/project/proj1
и:
$ cd ~/project/proj1/
$ cat .gitignore
/abc
sub/file
$ cat sub/.gitignore
/dir/
Все эти записи содержат или начинаются с /
, поэтому верхний уровень .gitignore
подавляет жалобы на неотслеживаемый файл abc
в верхнем уровне проекта плюс жалобы на неотслеживаемый файл file
в каталоге sub
.Между тем, каталог sub
имеет свой собственный .gitignore
, который не только подавляет жалобы, но и не позволяет Git даже перечислять содержимое of, каталог dir
в sub
, т. Е. Git незагляните внутрь project/proj1/sub/dir/
(следовательно, не обнаруживает и не жалуется на любые неотслеживаемые файлы в этом каталоге).
Обратите внимание, что если мы изменим оба файла .gitignore
, чтобывместо этого:
$ cat .gitignore
/abc
$ cat sub/.gitignore
/file
/dir/
набор игнорируемых файлов остается точно таким же.