it-roy-ru.com

Как я могу остановить .gitignore от появления в списке неотслеживаемых файлов?

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

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

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

948
Jacques René Mesrine

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

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

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

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

917
August Lilleaas

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

273
Paweł Hajdan

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

75
1800 INFORMATION

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

  1. Добавить в свой ~/.gitconfig файл

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

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

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

51
Alec the Geek

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

git update-index --assume-unchanged .gitignore

Источник .

42
Leif Gruenwoldt

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

git add .gitignore
git commit -m "add .gitignore file"
git status
37
Greg Hewgill

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

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

В частности, чтобы игнорировать файл, на самом деле используйте команду 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.

20
Evolve

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

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

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

.gitignore # Ignore the hand that feeds!

в ваш файл .gitignore!

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

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

15
chase

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

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

15
bayer

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

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

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

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

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

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

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

*

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

*
!.gitignore
10
Maze

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

Обновление этот файл

.git/info/exclude 

с вашим подстановочным знаком или именем файла

*pyc
*swp
*~
8
Paul Tyrrell

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

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

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

4
Andrea Perdicchia

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

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

git update-index --assume-unchanged FILENAME_TO_IGNORE

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

git update-index --no-assume-unchanged

ОБНОВИТЬ:

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

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

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

3
Aaron

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

echo '\\.*' >> .gitignore

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

3
weffen

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

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

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

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

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

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

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

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

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

1
Sasa

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

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

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

1
Michael Durrant

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

1
John Brown

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

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

0
Stephen McConnell