Как рекурсивно игнорировать все скрытые каталоги / файлы в репозитории git?

129

Я бы хотел, чтобы Git игнорировал все скрытые файлы и каталоги. т.е.

  • .aptitude
  • .ssh/
  • .bash_rc
  • config/.hidden

Есть ли простое правило, чтобы охватить это без особого добавления каждой записи?

Poe
источник

Ответы:

166

Просто добавьте узор в .gitignore

.*
!/.gitignore

Изменить: добавлен сам .gitignoreфайл (имеет значение, если он еще не зафиксирован).

Даниэль Бёмер
источник
3
Возможно, вы захотите принудительно добавить некоторые файлы, которые необходимы после этого. например. файл .htaccess. Конечно, исходя из ваших требований.
dakdad
3
@dakdad: Спасибо за предложение. Улучшил ответ. Если у Poe есть какие-то специальные файлы, например, .htaccessуже зарегистрированные, они продолжают отслеживаться. gitignoreважен только для новых файлов.
Daniel Böhmer
@ DanielBöhmer Может быть, это уже не касается темы, но есть ли причина для отмены игнорирования, /.gitignoreа не каждого .gitignoreфайла, независимо от того, где он находится? Т.е. почему бы не перечислить !.gitignore(без косой черты)?
Джейсон Янг,
1
@JasonYoung Интересный вопрос. Что ж, этот шаблон отменяет игнорирование только самого файла. Я считаю это более кратким, без побочных эффектов, для примера для копирования и вставки. Конечно, вы, вероятно, можете просто отменить игнорирование любых .gitignoreфайлов в вашем .gitignoreфайле верхнего уровня . Но выбор за вами.
Даниэль Бёмер,
64

.gitignore будет влиять только на файлы, которые еще не были «добавлены».

Чтобы новые записи .gitignore влияли на все файлы

  1. Внесите изменения в .gitignore
  2. git commit -a -m "Pre .gitignore changes"
  3. git rm -r --cached .
  4. git add .
  5. git commit -a -m "Post .gitignore changes"
  6. git status должен выводить «ничего не фиксировать (рабочий каталог очищен)» `
Нат Дарк
источник
Строка «еще не добавлено» является здесь ключевым моментом, потому что, если вы уже зафиксировали данный файл, игнорирование больше не будет работать с ним, вы должны удалить его из репозитория, а в следующий раз, когда вы создадите его .gitignore проигнорирует это.
Георгий Пеев
21

В .git/info/exclude, добавьте следующую строку:

.*

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

slayedbylucifer
источник