Родительский gitignore, чтобы игнорировать любые файлы gitignore подкаталогов

#git #gitignore

Вопрос:

Есть ли способ с помощью .gitignore файла (или каким-либо образом с помощью управления версиями git) игнорировать эффекты .gitignore файлов в подкаталогах? Конкретный случай использования заключается в том, что я копирую папки с открытым исходным кодом в свое репозиторий git, и в этих папках с открытым исходным кодом есть свои собственные .gitignore файлы, которые я хотел бы игнорировать. Я не хочу проходить процесс их удаления вручную, потому что каждый раз, когда я переношу последнюю исходную папку, мне придется запоминать/автоматизировать/и т.д. Удаление этих файлов. Скорее, я хотел бы иметь структуру папок, как показано ниже:

 file1.c
.gitignore
module1/
  src1.c
  .gitignore
  ...
module2/
  src2.c
  .gitignore
  ...
 

Где .gitignore применяется корень, но все .gitignore в папках модулей игнорируются. Это не проблема, если они привержены системе управления версиями. Но цель состоит в том, чтобы игнорировать влияние содержимого этих .gitignore файлов в общем каталоге.

Комментарии:

1. Короткий ответ: ни за что. Вероятно module1 , module2 , etc должны быть подмодулями (отдельными репозиториями), а не подкаталогами?

Ответ №1:

Вы не можете сделать это с помощью .gitignore файлов, потому что у них есть иерархия / система приоритетов, в которой «внутреннее» .gitignore переопределяет любые инструкции от «внешнего» .gitignore . Следовательно, даже если вы добавите внешние .gitignore отрицания:

 !inner/foo
 

чтобы попытаться перестать inner/.gitignore перечислять inner/foo , это не делает этого.

Однако вы можете сделать это до .git/info/excludes конца, так как это имеет более высокий приоритет , чем любой .gitignore другой. .git/info/excludes Файл никогда не фиксируется, поэтому вам придется хранить данные в другом месте (например, в файле, который зафиксирован), а затем копировать их на место в каждом клоне, который вы делаете.

Я не знаю вашей настоящей конечной цели, но это пахнет проблемой XY.