Игнорировать сам файл .gitignore

Я только что сделал git init в корне моего нового проекта.

Затем я создал файл .gitignore.

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

866
задан Jacques René Mesrine 20 апр. '09 в 9:42
источник поделиться
19 ответов

Файл .gitignore должен находиться в вашем репозитории, поэтому его следует добавить и зафиксировать, как предлагает git status. Он должен быть частью дерева репозитория, так что его изменения могут быть объединены и т.д.

Итак, добавьте его в свой репозиторий, он не должен быть gitignored.

Если вы действительно хотите добавить .gitignore в файл .gitignore, если вы не хотите, чтобы это было совершено. Однако в этом случае лучше добавить игнорирование в .git/info/exclude, специальный локальный файл checkout, который работает так же, как .gitignore, но не отображается в состоянии git, поскольку он находится в папке .git.

См. также https://help.github.com/articles/ignoring-files

815
ответ дан August Lilleaas 20 апр. '09 в 10:11
источник поделиться

Если вы хотите сохранить список игнорируемых файлов вне вашего дерева Git, вы можете использовать файл .git/info/exclude. Он применяется только к вашей проверке репо.

255
ответ дан Paweł Hajdan 20 апр. '09 в 10:14
источник поделиться

Вы могли бы поместить строку ".gitignore" в ваш файл ".gitignore". Это приведет к тому, что файл .gitignore будет проигнорирован git. На самом деле я не думаю, что это хорошая идея. Я думаю, что файл игнорирования должен контролироваться и отслеживаться версией. Я просто помещаю это для полноты.

66
ответ дан 1800 INFORMATION 20 апр. '09 в 10:58
источник поделиться

У вас также может быть глобальный пользовательский файл git .gitignore, который будет автоматически применяться ко всем вашим репозиториям. Это полезно для файлов IDE и редактора (например, swp и *~ файлов для Vim). Измените папки для размещения вашей ОС

  • Добавьте в свой ~/.gitconfig файл

    [core]
    excludesfile = /home/username/.gitignore
    
  • Создайте файл ~/.gitignore с шаблонами файлов, которые нужно игнорировать

  • Сохраните ваши точечные файлы в другом репо, чтобы иметь резервную копию (необязательно).

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

44
ответ дан Alec the Geek 10 июня '09 в 10:46
источник поделиться

После добавления файла .gitignore и его фиксации он больше не будет отображаться в списке "untracked files".

git add .gitignore
git commit -m "add .gitignore file"
git status
37
ответ дан Greg Hewgill 20 апр. '09 в 9:50
источник поделиться

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

git update-index --assume-unchanged .gitignore

Источник.

33
ответ дан Leif Gruenwoldt 09 февр. '11 в 23:19
источник поделиться

Просто у кого-то другого есть такая же боль. Мы хотели исключить файл, который уже был зафиксирован.

Этот пост был более полезным: работает с .git/info/exclude слишком поздно

В частности, что вам нужно игнорировать файл, на самом деле использовать команду git remove См. git rm (http://www.kernel.org/pub/software/scm/git/docs/git-rm.html)

вы проверяете его, перейдя

git rm --dry-run *.log
(если вы хотите исключить все файлы журнала)

будет выводиться то, что было бы исключено, если вы его запустили.

затем

вы запустите его, перейдя

git rm *.log
(или любой путь/выражение имени файла, которое вы хотите)

Затем добавьте строку *.log в ваш файл .gitignore.

18
ответ дан Evolve 25 сент. '09 в 6:00
источник поделиться

Идея состоит в том, чтобы поместить файлы, специфичные для вашего проекта, в файл .gitignore и (как уже упоминалось) добавить его в репозиторий. Например, .pyc и .o файлы, журналы, которые создает testuite, некоторые приборы и т.д.

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

14
ответ дан bayer 20 апр. '09 в 10:55
источник поделиться

Прежде всего, как и многие другие, ваш .gitignore должен отслеживаться Git (и поэтому его нельзя игнорировать). Позвольте мне объяснить, почему.

(TL; DR: зафиксировать файл .gitignore и использовать global .gitignore, чтобы игнорировать файлы, созданные вашей IDE или операционной системы)

Git, как вы, вероятно, уже знаете, представляет собой систему управления распределенной версией. Это означает, что он позволяет переключаться между различными версиями (даже если развитие расходится на разные ветки), а также позволяет нескольким разработчикам работать в одном проекте.

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

Конечно, будут некоторые файлы и папки, которые вы захотите проигнорировать, но которые являются конкретными для вас и не применяются к другим разработчикам. Однако они не должны быть в проекте .gitignore. Есть еще два места, где вы можете игнорировать файлы и папки:

  • Файлы и папки, созданные вашей операционной системой или IDE, должны быть помещены в global .gitignore. Преимущество в том, что этот .gitignore применяется ко всем хранилищам на вашем компьютере, поэтому вам не нужно повторять это для каждого репозитория. И он не делится с другими разработчиками, поскольку они могут использовать другую операционную систему и/или среду IDE.
  • Файлы, которые не входят в проект .gitignore, а также в глобальный .gitignore, могут быть проигнорированы с использованием явного репозитория исключает в your_project_directory/.git/info/exclude. Этот файл не будет использоваться совместно с другими разработчиками и определен для этого единственного репозитория.
13
ответ дан Nic Wortel 01 июля '14 в 13:21
источник поделиться

Конечно, файл .gitignore отображается в статусе, потому что он не отслеживается, и git видит его как вкусный новый файл, чтобы поесть!

Так как .gitignore является невоспроизводимым файлом, но он является кандидатом, которого следует игнорировать git, когда вы помещаете его в .gitignore!

Итак, ответ прост: просто добавьте строку:

.gitignore # Ignore the hand that feeds!

в ваш .gitignore файл!

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

Для справки, посмотрите gitignore (5) manpage на kernel.org.

12
ответ дан chase 11 июня '09 в 23:01
источник поделиться

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

*

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

*
!.gitignore
9
ответ дан Maze 19 июля '11 в 15:46
источник поделиться

Кажется, это работает только для вашего текущего каталога, чтобы получить Git, чтобы игнорировать все файлы из репозитория.

обновить этот файл

.git/info/exclude 

с вашей wild card или filename

*pyc
*swp
*~
5
ответ дан Paul Tyrrell 09 июня '09 в 11:17
источник поделиться

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

git rm --cached dirToFile/file.php
vim .gitignore
git commit -a

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

3
ответ дан Andrea Perdicchia 06 февр. '14 в 16:39
источник поделиться

Перейдите в базовый каталог вашего репозитория git и выполните следующую команду:

echo '\\.*' >> .gitignore

Все точечные файлы будут игнорироваться, в том числе это надоедливое .DS_Store, если вы на Mac.

2
ответ дан weffen 30 дек. '10 в 16:15
источник поделиться

Если вы уже зарегистрировались в .gitignore и хотите проигнорировать его модификации, ознакомьтесь с этим ответом:

Попробуйте использовать эту команду:

git update-index --assume-unchanged FILENAME_TO_IGNORE

Чтобы отменить его (если вы когда-либо захотите зафиксировать изменения), используйте:

git update-index --no-assume-unchanged

UPDATE

Здесь, как перечислить "принимать неизменные" файлы в текущей Каталог:

git ls-files -v | grep -E "^[a-z]"

Как опция -v будет использовать строчные буквы для "предполагать неизменным", файлы.

1
ответ дан Aaron 04 окт. '16 в 2:27
источник поделиться

Я думаю, что есть ситуации, когда игнорирование .gitignore очень полезно. Например, когда у вас несколько команд или большая команда, работающая на одной и той же кодовой базе. В этом случае вам нужно иметь определенные соглашения, одно из этих соглашений касается того, что игнорируется в репозитории git. Обычно это игнорирование файлов и каталогов, созданных IDE или ОС, некоторых сгенерированных журналов и т.д.

Однако есть сила, которая стремится ввести нетрадиционные изменения в файл .gitignore. Файл .gitignore может быть дополнительно изменен безответственным человеком, по ошибке, инструментом, который используется, или в каком-либо другом случае.

Чтобы иметь противодействие этому, мы можем сделать следующее:

  • Первоначальный .gitignore должен отражать соглашение в команде (-ах),
  • После того, как он будет нажат, .gitignore должен быть защищен добавлением записи .gitignore и повторным этим изменением. Файл .gitignore " запечатан" таким образом.

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

К сожалению, вы не можете быть на 100% защищены от глупости, но таким образом вы сделали все возможное, чтобы предотвратить глупые вещи.

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

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

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

1
ответ дан Sasa 29 авг. '16 в 18:36
источник поделиться

Вполне возможно, что конечный пользователь хочет иметь Git игнорировать файл .gitignore просто потому, что определенные папки IDE, созданные Eclipse, вероятно, не совпадают с NetBeans или другой IDE. Таким образом, чтобы поддерживать антагонизм IDE исходного кода, он упрощает жизнь с пользовательским игнорированием Git, которое не распространяется на всю команду, поскольку отдельные разработчики могут использовать разные IDE.

1
ответ дан John Brown 13 марта '13 в 6:32
источник поделиться

Я обнаружил, что лучшее место для установки игнорирования файлов pesky .DS_Store находится в файле .git/info/exclude.

IntelliJ, похоже, делает это автоматически, когда вы создаете в нем репозиторий git.

0
ответ дан Stephen McConnell 05 окт. '12 в 16:30
источник поделиться

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

Если бы это было вызвано .the_list_of_ignored_files, это могло бы быть немного более очевидным.

Аналогия - это список предметов, которые вы НЕ хотите делать. Если вы не перечислите их где-то, это своего рода список дел, о которых вы не узнаете.

0
ответ дан Michael Durrant 17 марта '14 в 22:29
источник поделиться

Другие вопросы по меткам или Задайте вопрос