Gitignore не игнорирует файл

Обновлено: 07.07.2024

Мой файл .gitignore игнорируется, и файлы, которые следует игнорировать, по-прежнему видны.

Файлы находятся в управлении версиями, но с разумными изменениями я не хочу нажимать. git rm . не подходит, потому что файлы должны находиться под контролем версий (с другими настройками в файлах). Я просто не хочу вносить свои изменения в эти файлы.

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

Я думаю, вы уже add редактировали свои файлы и теперь пытаетесь их игнорировать.

У меня была такая же проблема: мне нужен был другой файл .htaccess для каждого репозитория, тогда я не мог, потому что файл htaccess уже был добавлен в репозиторий. Теперь он работает, я могу изменить любой файл .htaccess из любой версии, не нажимая на них git. Марк прав, когда говорит: «Сначала нужно удалить его, прежде чем его можно будет игнорировать. Это можно сделать с помощью git rm».

Я действовал в таком порядке:

  • сделайте резервную копию вашего файла .htaccess где-нибудь
  • удалите файл .htaccess с помощью git rm .htaccess
  • зафиксировать это изменение (удаление .htaccess)
  • толкни это (git push)

Это, очевидно, удалит ваш файл .htaccess

  • затем отредактируйте .gitignore и добавьте /.htaccess
  • зафиксировать, затем нажать
  • воссоздайте файл .htaccess, восстановив предыдущую резервную копию

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

Надеюсь, это ясно

После описанных здесь шагов anybug мой git все еще отслеживал .htaccess, и это помогло:

Чтобы вернуться назад:

Поскольку вы хотите:

  • оставьте .htaccess в репозитории Git (без git rm )
  • иметь в нем локальные конфиденциальные данные
  • на этапе оформления заказа заполните .htaccess личными данными
  • на этапе фиксации очистите .htaccess от всех конфиденциальных данных

content filter driver

Затем вы можете создать версию зашифрованного файла, который ваш скрипт smudge будет:

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

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

Предположим, что ниже показано содержимое файла .gitignore . Здесь .htaccess находится в корневом каталоге проекта.

Давайте запустим приведенную ниже команду, чтобы игнорировать файлы .htaccess , config.php и database.php .

Если вы хотите снова начать отслеживание:

Похоже, что файл .htaccess уже добавлен в систему контроля версий. Вам нужно сначала удалить его, прежде чем его можно будет игнорировать. Это можно сделать с помощью git rm.

Я делаю это все время. Я начинаю с файлов конфигурации в своем репо, а затем решаю, что они мне не нужны.

Вы можете удалить что-то из своего репо, используя

Это беспокоило меня несколько дней. Файл .htaccess уже находится под контролем версий и был изменен.


.gitignore

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

Что такое .gitignore?

Git (или GitHub) видит каждый файл в вашем рабочем каталоге. Он характеризует каждый файл как один из трех:

  • Отслеживаются: Эти файлы либо зафиксированы, либо поставлены ранее в истории.
  • Неотслеживаемые: Это файлы, которые ранее не были поставлены или зафиксированы.
  • Игнорируется: Это файлы, которые пользователь сам сказал Git полностью игнорировать.

Эти игнорируемые файлы могут варьироваться от сценария к сценарию, и в основном это файлы, созданные компьютером или артефакты сборки. Это обычная практика; вы можете игнорировать другие файлы в соответствии с вашими потребностями. Некоторые примеры этих файлов:

  • Скомпилированный код: Эти файлы обычно имеют расширение .class, .pyc, .ccp и т. Д.
  • Скрытые системные файлы: Это файлы, которые используются системой для своих операций, но скрыты от простого просмотра, например, DS_Store или Thumbs.db и т. Д.
  • Построить выходные каталоги: В основном это каталоги / bin, / out и т. Д.
  • Кеши зависимостей: Эти файлы могут быть содержимым модулей / node или / packages.
  • Файлы конфигурации IDE: Это файлы конфигурации, которые в основном создаются или управляются вашим программным обеспечением IDE.
  • Файлы, созданные во время выполнения: Есть несколько программ, которые создают файлы во время выполнения. Если любой такой код выполняется, некоторые файлы могут быть сгенерированы во время выполнения в вашей рабочей папке, и вы можете игнорировать их в Git.

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

Что заставляет .gitignore не работать?

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

Вот некоторые решения, которые могут работать для вас. Каждое решение может быть неприменимо в вашем случае, поэтому убедитесь, что вы переключаетесь на следующее, если начальные условия не выполняются.

Решение 1. Проверка файла .gitignore

Появился интересный случай, когда мы увидели, что файл .gitignore создан в неправильном формате. Эта конкретная проблема возникла, когда пользователи создали файл с помощью стандартного приложения «Блокнот» в ОС Windows. Оказывается, Блокнот пишет файл в Unicode вместо формата ANSI. В этом решении мы сохраним изменения в Блокноте в правильном формате .gitignore и посмотрим, решит ли это проблему.

Замечания: Вы должны удалить расширение .txt из файла, когда создаете новый файл с помощью Блокнота.

  1. После написания кода или изменений в новом текстовом документе в Блокноте, нажмите на файл и выберите Сохранить как.
  1. Сейчас перед кодирование, Выбрать ANSI. Теперь удалите расширение файла .txt и сохраните файл с именем ‘.gitignore». Выберите правильный каталог и сохраните.


Выбор ANSI в качестве типа кодировки

  1. Теперь перейдите в каталог и проверьте, создан ли правильный файл. Теперь протестируйте его снова с помощью Git и посмотрите, работает ли функция игнорирования должным образом.

Разработчики должны воздерживаться от использования Блокнота по умолчанию в Windows. Вместо этого вы должны использовать соответствующий «блокнот для программистов». Некоторые примеры включают Notepad ++ и т. Д. В них таких проблем не будет.

Замечания: Если ваш файл уже сохранен в формате UNICODE, вы должны правильно сохранить содержимое в формате ANSI, если вы хотите, чтобы Git правильно обнаружил ваш файл.

Решение 2. Проверка файла, который вы пытаетесь игнорировать

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

Решение 3. Повторное добавление файлов в репозиторий

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

Замечания: Вы должны сделать резервную копию своего кода в другом месте, прежде чем выполнять это решение. Всегда хорошо иметь резервную копию на всякий случай.

  1. Выполните следующую команду. Это приведет к удалению и удалению путей к вашим файлам из индекса git рекурсивным способом.
  1. После того, как это выполнено, вы должны выполнить следующую команду. Это добавит все ваши файлы обратно, и так как .gitignore будет иметь правила, будут обновлены только правильные файлы.
  1. Теперь мы добавим все ваши файлы обратно в индекс, используя код ниже:

Теперь проверьте ваши файлы и посмотрите, решена ли проблема, и вы можете снова использовать .gitignore без каких-либо проблем.

Заранее Спасибо Большое!*)

__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь

Разнести .git .gitignore и файлы в разные папки
Гуру, подскажите, такое возможно. Цель: папка где куча файлов, 2 из которых надо.


Gitignore
на скринах видно, я же добавил всю папку идею в игнор чего ему надо.

.gitignore
Закомитил всю директорию проекта. Потом изменил файлы. То есть они у меня висят как modified.

.gitignore
Доброго времени суток. У меня возник такой вопрос: у меня есть проект (локально, на репозитории и.

.access.php
.gitignore
bitrix/PEAR
bitrix/backup
bitrix/cache
bitrix/managed_cache
bitrix/php_interface/dbconn.php
bitrix/php_interface/managers_dump.txt
bitrix/stack_cache
bitrix/updates
test/index.php
testing/index.php
buffer
bup-files/
curdecvacstatus
curmailstatus
curnotifystatus
curstatusstatus
Information_docs
mysql_debug.sql
search/e-log.txt
soap/1c/logs
timesheet/export/finance_department_report.php
timesheet/export/id_for_finance_department
timesheet/resentProjs.2add
upload
vacation/managing/caching
vacation/managing/otpuska-ostatki.csv
vacation/managing/soarrnew_dump
tags.xml
users.txt

Да, странно. И что, ни одно из правил, указанных в .gitignore, не действует ?

Проверьте, что файл лежит в корневой папке проекта, и действительно не имеет расширения.

Проверил. В корне и не имеет расширения, но все равно показывает что в файлах были какие то изменения(

В документации Git указано:

If you create a file in your repository named .gitignore git will use its rules when looking at
files to commit. Note that git will not ignore a file that was already tracked before a rule
was added to this file to ignore it. In such a case the file must be un-tracked, usually with
git rm --cached filename

То есть, добавление .gitignore не действует на уже измененные к тому времени файлы.
Это не Ваш случай ? Это значит, что пока не будет сделан commit или reset, отслеживаемые файлы (то есть, те,
которые были помещены под контроль версий) не будут игнорироваться.
Но вообще, все это странно, .gitignore обычно сразу начинает действовать, стоит его
только добавить в папку с проектом. Что, если попробовать добавить в него только
одно правило для какого-нибудь одного типа файлов, например *.txt ? Тоже не работает ? все эти файлы у тебя в индексе (ты их добавил через какой-нибудь git add . )
для удаления файла из индекса нужно выполнить

а если ты их закоммитил ещё, то нужно будет коммит сделать, что ты их удаляешь

когда они появятся в секции Untracked, тогда .gitignore и станет на них действовать

accept, я сделал так и закомитил, но когда я сделал

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

Добавлено через 6 минут
Так же, когда я просто указываю сам файл, при этом ничего в нем не изменяя, то выдается ошибка fatal, а если я в файле изменил что-то, и делаю

это значит, что они действительно были в индексе

они остались в дереве, но теперь их нет в индексе (в них не отслеживаются изменения)

И как сделать, чтобы не каждый файл вот так удалять из индекса, а сразу все, которые написаны в .gitignore ?

это разные маски: одна идёт прямо в команду, а другая разворачивается в командной строке

Так же, когда я просто указываю сам файл, при этом ничего в нем не изменяя, то выдается ошибка fatal

выдаётся, когда в индексе нет файла filename

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

поэтому, если файла нет в индексе, а он там может быть как изменённый, так и неизменённый, то команда удаления из индекса не сработает
если же файл есть в индексе, а он там может быть как изменённый, так и неизменённый, то команда удаления из индекса сработает

Добавлено через 3 минуты
пример того, что выводится при удалении файлов из индекса

accept, я не очень понял про маски. вот у меня в .gitignore записаны файлы:
.idea
*.iml

.access.php
.gitignore
bitrix/PEAR
bitrix/backup
bitrix/cache
bitrix/managed_cache
bitrix/php_interface/dbconn.php
bitrix/php_interface/managers_dump.txt
bitrix/stack_cache
bitrix/updates
test/index.php
testing/index.php
buffer
bup-files/
curdecvacstatus
curmailstatus
curnotifystatus
curstatusstatus
Information_docs
mysql_debug.sql
search/e-log.txt
soap/1c/logs
timesheet/export/finance_department_report.php
timesheet/export/id_for_finance_department
timesheet/resentProjs.2add
upload
vacation/managing/caching
vacation/managing/otpuska-ostatki.csv
vacation/managing/soarrnew_dump
tags.xml
users.txt


Как сделать, чтобы они не отображались то? И почему удалился файл у друга? А то я боюсь удалять у себя из индекса и пушить, потому что у него же удалится.

Добавлено через 7 часов 25 минут
Может кто объяснить пожалуйста?

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

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

Какие файлы следует игнорировать?

Игнорируемые файлы обычно представляют собой файлы, специфичные для платформы, или автоматически созданные из сборочных систем. Ниже приводятся некоторые общие примеры:

  • Runtime файлы, такие как log , lock , cache или временные файлы ( tmp ).
  • Файлы с конфиденциальной информацией, такие как пароли или ключи API.
  • Каталоги зависимостей, такие как /vendor или /node_modules .
  • Build каталоги, такие как /public или /dist .
  • Системные файлы, такие как .DS_Store или Thumbs.db
  • Конфигурационные файлы IDE или текстового редактора.

Шаблоны .gitignore

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

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

Комментарии

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

Если шаблон не начинается со слэша, он соответствует файлам и каталогам в любом каталоге или подкаталоге.

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

Имена файлов

Самый простой шаблон - это просто имя файла без каких-либо специальных символов.

ШаблонПримеры совпадений
/access.log access.log
access.log access.log
logs/access.log
var/logs/access.log
build/ build

Символы подстановки

* - Символ звездочки соответствует нулю или более символам.

ШАБЛОНПРИМЕРЫ СОВПАДЕНИЙ
*.log error.log
logs/debug.log
build/logs/error.log

** - Два соседних символа звездочки соответствуют любому файлу или нулю или более каталогам. Когда за ним следует косая черта ( / ), она соответствует только каталогам.

ШАБЛОНПРИМЕРЫ СОВПАДЕНИЙ
logs/** Совпадает со всем, что находится в каталоге logs.
**/build var/build
pub/build
build
foo/**/bar foo/bar
foo/a/bar
foo/a/b/c/bar

? - Вопросительный знак соответствует любому отдельному символу.

ШАБЛОНПРИМЕРЫ СОВПАДЕНИЙ
access?.log access0.log
access1.log
accessA.log
foo?? fooab
foo23
foo0s

Квадратные скобки

[…] - Совпадает с любыми символами, заключенными в квадратные скобки. Когда два символа разделены дефисом - обозначает диапазон символов. Диапазон включает в себя все символы, находящиеся между этими двумя символами. Диапазон может быть алфавитным или цифровым.

Если первый символ после [ является восклицательным знаком ( ! ), то образец соответствует любому символу, кроме символов из указанного набора.

ШАБЛОНПРИМЕРЫ СОВПАДЕНИЙ
*.[oa] file.o
file.a
*.[!oa] file.s
file.1
file.0
access.2.log access.0.log
access.1.log
access.2.log
file.[a-c].out file.a.out
file.b.out
file.c.out
file.[a-cx-z].out file.a.out
file.b.out
file.c.out
file.x.out
file.y.out
file.z.out
access.[!0-2].log access.3.log
access.4.log
access.Q.log

Исключающие шаблоны

Шаблон, начинающийся с восклицательного знака ( ! ), отменяет (повторно включает) любой файл, игнорируемый предыдущей шаблоном. Исключением из этого правила является повторное включение файла, если его родительский каталог исключен.

ШАБЛОНПРИМЕРЫ СОВПАДЕНИЙ
*.log
!error.log
error.log or logs/error.log will not be ignored

Пример .gitignore

Локальный .gitignore

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

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

Персональные правила игнорирования

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

Глобальный .gitignore

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

Файл может называться по вашему усмотрению и храниться в любом месте. Наиболее распространенным местом хранения этого файла является домашний каталог. Вам придется вручную создать файл и настроить Git для его использования.

Например, чтобы установить

/.gitignore_global в качестве глобального файла игнорирования Git, выполните следующие действия:

1. Создайте файл:

2. Добавьте этот файл в Git-конфигурацию:

3. Откройте файл в текстовом редакторе и добавьте в него свои правила.

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

Игнорирование ранее зафиксированных файлов

Файлы в вашей рабочей копии могут отслеживаться или не отслеживаться.

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

Опция --cached говорит не удалять файл из рабочего дерева, а только удалять его из индекса.

Для рекурсивного удаления каталога используйте параметр -r :

Если вы хотите удалить файл как из индексной, так и из локальной файловой системы, опустите опцию --cached .

При рекурсивном удалении файлов используйте опцию -n , которая выполнит пробный запуск и покажет, какие файлы будут удалены:

Отладка файла .gitignore

Иногда бывает сложно определить, почему тот или иной файл игнорируется, особенно если вы используете несколько файлов .gitignore или сложные шаблоны. В этом случае пригодится команда git check-ignore с опцией -v, которая указывает на то, что нужно отображать детали совпадающего шаблона.

Например, чтобы проверить, почему файл www/yarn.lock игнорируется, нужно выполнить следующее:

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

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

Отображение всех игнорируемых файлов

Команда git status с опцией -ignored отображает список всех проигнорированных файлов:

Заключение

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

Читайте также: