Переопределить поддиректорию gitignore «должны включать» правило с локальным .git / info / exclude - PullRequest
0 голосов
/ 03 октября 2019

Предположим, у меня есть следующая структура репозитория git

> tree -a
.
├── .git
│   ├── info
│   │   └── exclude
└── a
    ├── .gitignore
    ├── mustinclude.txt
    └── my-local-file-to-ignore.txt

И файл gitignore говорит всегда отслеживать текстовые файлы

> cat a/.gitignore
*
!*.txt

Можно ли настроить git так, чтобы он игнорировалa/my-local-file-to-ignore.txt только для себя? Мотивация для этого заключается в том, что я хочу включить локальные чистые файлы (для тестирования или чего-либо еще), но я не хочу, чтобы другие люди, использующие хранилище, знали о существовании такого файла.

Я пытался поместить этофайл в файле info / exclude, но он не работает. Я думаю, что это потому, что файл gitignore в всегда указывает, чтобы включить текстовый файл.

> cat .git/info/exclude
a/my-local-file-to-ignore.txt
> git status
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
    new file:   mustinclude.txt
    new file:   my-local-file-to-ignore.txt

1 Ответ

0 голосов
/ 06 октября 2019

.gitignore имеет более высокий приоритет над $GIT_DIR/info/exclude.

Git обычно проверяет gitignore паттерны из нескольких источников со следующим порядком приоритета , от от высшего к низшему (в пределах одного уровня приоритета последний соответствующий шаблон решает исход):

  • Шаблоны, считанные из командной строки для тех команд, которые их поддерживают.

  • Шаблоны, считанные из файла .gitignore в том же каталоге, что и путь, или в любом родительском каталоге, с шаблонами в файлах более высокого уровня (вплоть до верхнего уровня рабочего дерева)переопределяются теми, кто находится в файлах более низкого уровня, в каталог, содержащий файл. Эти шаблоны соответствуют относительно местоположения файла .gitignore. Проект обычно включает такие .gitignore файлы в своем хранилище, содержащие шаблоны для файлов, сгенерированных как часть сборки проекта.

  • Шаблоны, считанные из $GIT_DIR/info/exclude.

  • Шаблоны, считанные из файла, указанного в переменной конфигурации core.excludesFile.

В соответствии с руководством gitignore. $GIT_DIR/info/exclude - это файл, который вы должны использовать, когда хотите игнорировать файлы только для себя. Проблема в том, что шаблоны в вашем a/.gitignore не совпадают.

Чтобы достичь желаемого, вам нужно удалить глобальный шаблон игнорирования * из a/.gitignore и игнорировать ТОЛЬКО те файлы, которые вам не нужны.

...