#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.