Несколько `.gitignore`s хмурится? - PullRequest
189 голосов
/ 22 июля 2010

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

Ответы [ 5 ]

209 голосов
/ 22 июля 2010

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

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

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

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

82 голосов
/ 23 июля 2010

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

49 голосов
/ 22 июля 2010

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

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

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


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

15 голосов
/ 17 апреля 2015

Pro single

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

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

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

Pro несколько

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

  • Поскольку Git отслеживает только файлы, пустой .gitignore - единственный способ зафиксировать «пустой» каталог.

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


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

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

5 голосов
/ 02 июня 2016

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

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

*
!.gitignore

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...