Как добавить файл в gitignore

Обновлено: 04.07.2024

Установка и настройка

Получение и создание проектов

Базовый снимок

Ветвление и слияние

Обмен проектами и их обновление

Осмотр и сравнение

Исправление

Отладка

Электронная почта

Внешние системы

Администратор сервера

Руководства

Администрирование

Связные команды

Проверьте свою версию git, запустив

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

ОБЗОР

$XDG_CONFIG_HOME/git/ignore, $GIT_DIR/info/exclude, .gitignore

ОПИСАНИЕ

Файл gitignore указывает намеренно неотслеживаемые файлы, которые Git должен игнорировать. Файлы, уже отслеженные Git, не затрагиваются; подробности см. в ПРИМЕЧАНИЯХ ниже.

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

Шаблоны считываются из командной строки для тех команд, которые их поддерживают.

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

Шаблоны считываются из $GIT_DIR/info/exclude .

Шаблоны считываются из файла, указанного в переменной конфигурации core.excludesFile .

В какой файл поместить шаблон, зависит от того, как он будет использоваться.

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

Шаблоны, относящиеся к определенному репозиторию, но не требующие совместного использования с другими связанными репозиториями (например, вспомогательные файлы, находящиеся внутри репозитория, но относящиеся к рабочему процессу одного пользователя), должны помещаться в $GIT_DIR/info/ исключить файл.

Шаблоны, которые пользователь хочет, чтобы Git игнорировал во всех ситуациях (например, резервные копии или временные файлы, созданные выбранным пользователем редактором), обычно помещаются в файл, указанный в параметре core.excludesFile в ~/.gitconfig пользователя. Его значение по умолчанию — $XDG_CONFIG_HOME/git/ignore. Если $XDG_CONFIG_HOME не задан или пуст, вместо него используется $HOME/.config/git/ignore.

Основные инструменты подключения Git, такие как git ls-files и git read-tree, считывают шаблоны gitignore, заданные параметрами командной строки, или из файлов, заданных параметры командной строки. Инструменты Git более высокого уровня, такие как git status и git add, используют шаблоны из указанных выше источников.

ФОРМАТ ШАБЛОНА

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

Конечные пробелы игнорируются, если только они не заключены в кавычки с обратной косой чертой ("\").

Необязательный префикс "!", отрицающий шаблон; любой соответствующий файл, исключенный предыдущим шаблоном, будет снова включен. Невозможно повторно включить файл, если исключен родительский каталог этого файла. Git не перечисляет исключенные каталоги из соображений производительности, поэтому любые шаблоны для содержащихся файлов не действуют, независимо от того, где они определены. Поместите обратную косую черту ("\") перед первым "!" для шаблонов, начинающихся с буквального "!", например, "\!important!.txt".

Слэш / используется в качестве разделителя каталогов. Разделители могут встречаться в начале, середине или конце шаблона поиска .gitignore.

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

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

Например, шаблон doc/frotz/ соответствует каталогу doc/frotz, но не каталогу/doc/frotz; однако frotz/ соответствует fritz и a/frotz, который является каталогом (все пути указаны относительно файла .gitignore).

Звездочка "*" соответствует чему угодно, кроме косой черты. Символ «?» соответствует любому одному символу, кроме «/». Обозначение диапазона, например. [a-zA-Z] может использоваться для соответствия одному из символов в диапазоне. См. более подробное описание в fnmatch(3) и флаге FNM_PATHNAME.

Две последовательные звездочки ("**") в шаблонах, совпадающих с полным путем, могут иметь особое значение:

Начальный символ "**", за которым следует косая черта, означает совпадение во всех каталогах. Например, «**/foo» соответствует файлу или каталогу «foo» в любом месте, так же, как шаблон «foo». "**/foo/bar" соответствует файлу или каталогу "bar" в любом месте, которое находится непосредственно в каталоге "foo".

Конечный "/**" соответствует всему внутри. Например, "abc/**" соответствует всем файлам внутри каталога "abc" относительно местоположения файла .gitignore с бесконечной глубиной.

Косая черта, за которой следуют две последовательные звездочки, после чего косая черта соответствует нулю или более каталогам. Например, "a/**/b" соответствует "a/b", "a/x/b", "a/x/y/b" и т. д.

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

КОНФИГУРАЦИЯ

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

ПРИМЕЧАНИЯ

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

Чтобы остановить отслеживание файла, который в данный момент отслеживается, используйте git rm --cached.

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

ПРИМЕРЫ

Шаблон hello.* соответствует любому файлу или каталогу, имя которого начинается с приветствия. . Если кто-то хочет ограничить это только каталогом, а не его подкаталогами, можно добавить перед шаблоном косую черту, то есть /hello.* ; шаблон теперь соответствует hello.txt, hello.c, но не соответствует a/hello.java.

Шаблон foo/ будет соответствовать каталогу foo и путям под ним, но не будет соответствовать обычному файлу или символической ссылке foo (это согласуется с тем, как pathspec работает в Git в целом)

Шаблоны doc/frotz и /doc/frotz имеют одинаковый эффект в любом файле .gitignore. Другими словами, косая черта в начале не имеет значения, если в шаблоне уже есть косая черта посередине.

Шаблон "foo/*" соответствует "foo/test.json" (обычный файл), "foo/bar" (каталог), но не соответствует "foo/bar/hello.c" ( обычный файл), так как звездочка в шаблоне не соответствует «bar/hello.c», в котором есть косая черта.

Вы можете настроить Git так, чтобы он игнорировал файлы, которые вы не хотите возвращать на GitHub.

Настройка игнорируемых файлов для одного репозитория

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

GitHub поддерживает официальный список рекомендуемых файлов .gitignore для многих популярных операционных систем, сред и языков в общедоступном репозитории github/gitignore. Вы также можете использовать gitignore.io для создания файла .gitignore для вашей операционной системы, языка программирования или IDE. Для получения дополнительной информации см. «github/gitignore» и сайт «gitignore.io».

Открыть Терминал Терминал Git Bash.

Перейдите к местоположению вашего репозитория Git.

Создайте файл .gitignore для своего репозитория.

Если команда выполнена успешно, вывода не будет.

Пример файла .gitignore см. в разделе "Некоторые распространенные конфигурации .gitignore" в репозитории Octocat.

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

Настройка игнорируемых файлов для всех репозиториев на вашем компьютере

Вы также можете создать глобальный файл .gitignore, чтобы определить список правил для игнорирования файлов в каждом репозитории Git на вашем компьютере. Например, вы можете создать файл по адресу ~/.gitignore_global и добавить в него некоторые правила.

  1. Откройте Терминал Terminal Git Bash.
  2. Настройте Git для использования файла исключения ~/.gitignore_global для всех репозиториев Git.

Исключение локальных файлов без создания файла .gitignore

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

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

Git рассматривает каждый файл в вашей рабочей копии как одну из трех вещей:

  1. отслеживаемый — файл, который ранее был размещен или зафиксирован;
  2. неотслеживаемый — файл, который не был помещен в промежуточный или зафиксированный файл; или
  3. игнорируется – файл, который Git явно проигнорировать.
  • кеши зависимостей, такие как содержимое /node_modules или /packages
  • скомпилированный код, например файлы .o , .pyc и .class
  • создать выходные каталоги, такие как /bin , /out или /target
  • файлы, созданные во время выполнения, например .log , .lock или .tmp
  • скрытые системные файлы, такие как .DS_Store или Thumbs.db
  • личные файлы конфигурации IDE, например .idea/workspace.xml

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

Git игнорировать шаблоны

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

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

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

Общие файлы .gitignore в вашем репозитории

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

Личные правила игнорирования Git

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

Глобальные правила игнорирования Git

Кроме того, вы можете определить глобальные шаблоны игнорирования Git для всех репозиториев в вашей локальной системе, установив свойство Git core.excludesFile. Вам придется создать этот файл самостоятельно. Если вы не знаете, куда поместить ваш глобальный файл .gitignore, ваш домашний каталог — неплохой выбор (и его легко найти позже). После того, как вы создали файл, вам нужно настроить его расположение с помощью git config :

Вы должны быть осторожны с тем, какие шаблоны вы выбираете для глобального игнорирования, поскольку разные типы файлов подходят для разных проектов. Специальные файлы операционной системы (например, .DS_Store и thumbs.db ) или временные файлы, созданные некоторыми инструментами разработчика, являются типичными кандидатами на глобальное игнорирование.

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

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

Вы можете опустить параметр --cached, если хотите удалить файл как из репозитория, так и из вашей локальной файловой системы.

Зафиксировать игнорируемый файл

Можно принудительно зафиксировать игнорируемый файл в репозитории с помощью параметра -f (или --force ) с git add :

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

Этот подход более очевиден и менее запутан для ваших товарищей по команде.

Сохранение игнорируемого файла

git stash – это мощная функция Git, позволяющая временно откладывать и отменять локальные изменения, что позволяет повторно применить их позже. Как и следовало ожидать, по умолчанию git stash игнорирует игнорируемые файлы и сохраняет изменения только в файлах, отслеживаемых Git. Однако вы можете вызвать git stash с параметром --all, чтобы также спрятать изменения в игнорируемых и неотслеживаемых файлах.

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

Если у вас есть сложные шаблоны .gitignore или шаблоны, разбросанные по нескольким файлам .gitignore, может быть сложно отследить, почему тот или иной файл игнорируется. Вы можете использовать команду git check-ignore с параметром -v (или --verbose), чтобы определить, какой шаблон вызывает игнорирование определенного файла:

Вывод показывает:

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

У меня есть репозиторий с файлом Hello.java . Когда я его компилирую, создается дополнительный файл Hello.class.

Я создал запись для Hello.class в файле .gitignore. Однако файл по-прежнему отслеживается.

Как заставить Git игнорировать Hello.class?

27 ответов 27

Проблема в том, что .gitignore игнорирует только те файлы, которые ранее не отслеживались (с помощью git add ). Запустите git reset name_of_file, чтобы удалить файл и сохранить его. Если вы хотите также удалить данный файл из репозитория (после отправки), используйте git rm --cached name_of_file .

Команда git rm --cached name_of_file удалит файл из репозитория git. Даже если вы добавите его в свой файл .gitignore. Это не игнорирование, это удаление.

Я рад, что ваше решение сработало для @Kohan95! Хотя этот вопрос следует переименовать в зависимости от выбранного ответа. Мои комментарии — это просто предупреждение разработчикам, которые могут не знать, что делает эта команда.

Попробовал git rm --cached Файл в репозитории был удален, но поскольку он находился в файле .gitignore, локальная копия не была удалена. В качестве дополнительного примечания, чтобы добавить каталог, вам нужно указать его с косой чертой «/». Я удалял каталог конфигурации Rubymine в проекте ruby, который кто-то зарегистрировал, который был «.idea». В файле я помещаю «.idea/», а затем «git rm --cached -r .idea», чтобы удалить каталог и все, что под ним (потому что git только файлы версий, а не каталоги.)

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

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

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

Как игнорировать измененные файлы (временно)

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

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

@Xman Почему ты сказал, что это временно? Я сделал шаги, которые вы упомянули для локального игнорирования git, и перезапустил свою систему, она по-прежнему показывает, что работает прямо чисто.

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

@mcbjam Специальной команды git ignore нет. Отредактируйте файл .gitignore, расположенный в соответствующем месте рабочей копии. Затем вы должны добавить этот .gitignore и зафиксировать его. Все, кто клонирует этот репозиторий, будут игнорировать эти файлы.

git update-index --assume-untchanged именно то, что мне было нужно, чтобы иметь возможность удалить .htpasswd из локального каталога и оставить его в рабочей среде

Это исключит Hello.class из git. Если вы уже зафиксировали его, выполните следующую команду:

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

@Imray вы можете поместить .gitignore в любом месте проекта git — если путь начинается с / , он будет относиться к расположению файла .gitignore; в противном случае он будет рекурсивно ссылаться на файлы в текущем каталоге и его дочерних каталогах.

1) Создайте файл .gitignore. Для этого просто создайте файл .txt и измените расширение следующим образом:

Введите здесь описание изображения

Тогда вам нужно изменить имя, написав следующую строку в окне cmd:

Где git.txt — это имя файла, который вы только что создали.

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

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

Затем в Git Bash вам нужно написать следующую строку:

Если репозиторий уже существует, вам необходимо сделать следующее:

  1. git rm -r --cached .
  2. добавьте git .
  3. git commit -m ".gitignore теперь работает"

Если шаг 2 не работает, вам следует написать полный маршрут файлов, которые вы хотите добавить.

Объяснение Gitignore: что такое Gitignore и как его добавить в Ваше репо

Файл .gitignore — это текстовый файл, который сообщает Git, какие файлы или папки следует игнорировать в проекте.

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

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

Записи в этом файле также могут соответствовать шаблону соответствия.

Это пример того, как может выглядеть файл .gitignore:

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

Это создаст файл ~/.gitignore_global . Теперь вы можете редактировать этот файл так же, как локальный файл .gitignore. Все ваши репозитории Git будут игнорировать файлы и папки, перечисленные в глобальном файле .gitignore.

Как отменить отслеживание файлов, ранее зафиксированных в новом Gitignore

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

git rm --кэшированное имя файла

Чтобы отменить отслеживание каждого файла в .gitignore:

Сначала зафиксируйте все незавершенные изменения кода, а затем запустите:

git rm -r --cached

Это удалит все измененные файлы из индекса (области подготовки), затем запустите:

git commit -m ".gitignore теперь работает"

Чтобы отменить git rm --cached имя файла, используйте git add имя файла

Дополнительная информация:

  • Документация по Git: gitignore
  • Игнорирование файлов: GitHub
  • Полезные шаблоны .gitignore: GitHub

Если эта статья была вам полезна, отправьте твит .

Научитесь программировать бесплатно. Учебная программа freeCodeCamp с открытым исходным кодом помогла более чем 40 000 человек получить работу в качестве разработчиков. Начать

freeCodeCamp – это поддерживаемая донорами некоммерческая организация, освобожденная от налогов в соответствии со статьей 501(c)(3) (идентификационный номер федерального налогоплательщика США: 82-0779546)

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

Пожертвования в пользу freeCodeCamp идут на наши образовательные инициативы и помогают оплачивать серверы, услуги и персонал.

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