Подтвердить что ты не робот

Многократные `.gitignore` s нахмурились?

Если репо состояло из нескольких независимых проектов, кажется, проще всего иметь только один файл .gitignore в корне репо, чем разные. Существует ли стандартная передовая практика в этом или в каком-либо анализе онлайн, когда один подход лучше, чем другой?

4b9b3361

Ответ 1

Я могу вспомнить как минимум две ситуации, когда вы хотите иметь несколько файлов .gitignore в разных (под) каталогах.

  • Различные каталоги имеют разные типы файлов для игнорирования. Например, .gitignore в верхнем каталоге вашего проекта игнорирует сгенерированные программы, а Documentation/.gitignore игнорирует сгенерированную документацию.

  • Игнорировать данные файлы только в заданном (под) каталоге (однако вы можете использовать /sub/foo в .gitignore).

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

Ответ 2

Как тангенциальная нота, один случай, когда возможность иметь несколько файлов .gitignore очень полезен, - это если вам нужен дополнительный каталог в вашей рабочей копии, который вы никогда не намерены совершать. Просто поместите в этот каталог 1-байтный .gitignore (содержащий только одну звездочку), и он никогда не появится в git status и т.д.

Ответ 3

У вас может быть несколько .gitignore, каждый из которых, конечно, находится в своем собственном каталоге.
Чтобы проверить, какое правило gitignore отвечает за игнорирование файла, используйте git check-ignore: git check-ignore -v -- afile.

И вы можете иметь другую версию файла .gitignore для каждой ветки: я уже видел такую ​​конфигурацию для обеспечения того, чтобы одна ветка игнорировала файл, а другая - нет: см. это .

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


Обратите внимание, что, поскольку git 1.8.2 (март 2013) вы можете сделать git check-ignore -v -- yourfile, чтобы увидеть, какой запуск gitignore (из которого .gitignore file) применяется к 'yourfile', и лучше понять, почему указанный файл игнорируется.
См. "которое правило gitignore игнорирует мой файл?"

Ответ 4

Pro single

  • Легко найти.

  • Правила запрета на охоту могут быть довольно сложными, если у меня есть несколько gitignore, на нескольких уровнях в репо.

  • С несколькими файлами вы также, как правило, заканчиваете с честным дублированием.

Pro multiple

  • Обладает "знанием" для части дерева файлов, где это необходимо.

  • Поскольку Git отслеживает только файлы, пустой .gitignore является единственным способом для фиксации "пустого" каталога.

    (И до Git 1.8 единственным способом исключения шаблона, такого как my/**.example, было создание my/.gitignore внутри с шаблоном **.foo. Эта причина не применяется сейчас, как вы можете сделать /my/**/*.example.)


Я предпочитаю один файл, где я могу найти все исключения. Я никогда не пропускал каждый каталог .svn, и я не пропущу ни одного каталога .gitignore.

Тем не менее, множественные gitignores довольно распространены. Если вы их используете, по крайней мере, будете последовательны в их использовании, чтобы сделать их разумными для работы. Например, вы можете поместить их в каталоги только на один уровень из корня.

Ответ 5

Существует много сценариев, в которых вы хотите скопировать каталог в репозиторий Git, но без файлов в нем, например каталоги logs, cache, uploads и т.д.

Так что я всегда делаю, это добавить файл .gitignore в эти каталоги со следующим содержимым:

*
!.gitignore

С этим .gitignore файлом Git не будет отслеживать файлы в этих каталогах, но все же разрешите добавить файл .gitignore и, следовательно, сам каталог в репо.