Когда бы вы использовали .git / info / exclude вместо .gitignore для исключения файлов?

144

Меня немного смущают плюсы и минусы использования .git/info/excludeи .gitignoreисключения файлов.

Оба они находятся на уровне хранилища / проекта, так как они отличаются и когда мы должны использовать .git/info/exclude?

Параг
источник

Ответы:

196

Преимущество .gitignoreзаключается в том, что, в отличие от этого, его можно проверить в самом хранилище .git/info/exclude. Другое преимущество состоит в том, что вы можете иметь несколько .gitignoreфайлов, по одному внутри каждого каталога / подкаталога для правил игнорирования, характерных для каталога, в отличие от .git/info/exclude.

Итак, .gitignoreдоступно во всех клонах репозитория. Поэтому в больших командах все люди игнорируют такие же файлы примера *.db, *.log. И вы можете иметь более конкретные правила игнорирования из-за нескольких .gitignore.

.git/info/excludeдоступно только для отдельных клонов, поэтому то, что один человек игнорирует в своем клоне, недоступно в клоне другого человека. Например, если кто-то использует Eclipseдля разработки, для этого разработчика может иметь смысл добавить .buildпапку, .git/info/excludeпотому что другие разработчики могут не использовать Eclipse.

В общем, должны быть включены правила files / ignore, которые должны игнорироваться повсеместно .gitignore, а в противном случае файлы, которые вы хотите игнорировать только в локальном клоне, должны войти в.git/info/exclude

му 無
источник
но в идеале это должно войти в ~ / .gitignore согласно официальной документации Git здесь, git-scm.com/docs/gitignore
Девендра Свами
@DevendraSwami Я не понял, в какую конкретную запись следует перейти ~/.gitignoreв вашем комментарии выше. Насколько я понимаю, правила игнорирования могут быть на 3 уровнях - $PROJECT/.git/info/excludeдля правил игнорирования $PROJECT/<any number of directories>/.gitignoreдля конкретного проекта (пользователя, пользователя), которые предназначены для правил игнорирования для конкретного проекта для любого пользователя в любом месте (при регистрации), ~/.gitignore для правил игнорирования для конкретного пользователя для любого проекта для этого пользователя. на этой машине. Исходя из цели, вы выбираете место для размещения записи.
mu 無
да, вы абсолютно правы Мой комментарий был связан с этим вопросом stackoverflow.com/questions/59673991/…
Девендра Свами
Я прошу прощения за оригинальный неполный комментарий.
Девендра Свами
2
@ShimmyWeitzhandler, файл sln уже в вашем репо? Тогда исключение или .ignore не помешает git отслеживать его изменения. Попробуйте git rm --cached <path-name>выполнить одно из следующих действий: удалите его из хранилища, но сохраните его локально. git update-index --skip-worktree <path-name>будет игнорировать изменения в файле, но держать его в хранилище. Из любопытства: почему вы хотите исключить файл sln? Это важная часть решения .Net, верно?
Коен
36

Гуглил: 3 способа исключения файлов

  1. .gitignore применяется к каждому клону этого репозитория (версионно, он будет у каждого),
  2. .git/info/exclude Относится только к вашей локальной копии этого хранилища (локальной, не переданной другим),
  3. ~/.gitignore применяется ко всем репозиториям на вашем компьютере (локальным, не совместно используемым с другими).

3. на самом деле требуется установить конфигурацию на вашем компьютере:

git config --global core.excludesfile '~/.gitignore'
LeGEC
источник
2
Да, я тоже это читал, но хотел получить более практичный (реальный мир) взгляд :-)
Parag
Связанный блог по ошибке называет файл .git/info/excludes, когда это должно быть .git/info/exclude, что подтверждается документацией, на которую он ссылается.
mwfearnley
13
(спойлер: третий способ - глобальное игнорирование компьютера через параметр в ~ / .gitconfig)
hmijail оплакивает отставников
@hmijail: спасибо, я включил твой комментарий в этот ответ
LeGEC
12

Просто для того, чтобы предложить наш (реальный мир) опыт: мы начали использовать .git / info / exclude, когда нам пришлось настраивать некоторые файлы конфигурации в каждой среде разработки, но все же хотели, чтобы исходный код сохранялся в репозитории и был доступен другим разработчикам.

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

Эффинг
источник
4

Используйте .gitignoreдля игнорирования правил, специфичных для проекта . Используйте excludeили глобальный файл игнорирования для игнорирования правил, специфичных для вашей среды .

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

Это помогает?

Марнен Лайбоу-Козер
источник