Как перестать отслеживать файл git
Перейти к содержимому

Как перестать отслеживать файл git

  • автор:

Больше не следить за изменениями в файле

Я сделал коммит определенного файла. Теперь мне не надо, чтобы GIT следил за изменениями в этом файле. Как мне это лучше сделать?

Отслеживать
141 1 1 золотой знак 2 2 серебряных знака 9 9 бронзовых знаков
задан 20 июл 2012 в 9:28
151 1 1 золотой знак 2 2 серебряных знака 9 9 бронзовых знаков

3 ответа 3

Сортировка: Сброс на вариант по умолчанию

Если я правильно вас понял, то вам нужно выполнить следующее

git update-index --assume-unchanged your_file 

После этого гит не будет реагировать на какие-либо изменения в этом файле, чтобы отменить это поведение, выполните следующее

git update-index --no-assume-unchanged your_file 

Отслеживать
ответ дан 1 дек 2012 в 14:36
AlexDenisov AlexDenisov
6,442 1 1 золотой знак 21 21 серебряный знак 29 29 бронзовых знаков

Спасибо. То что нужно! И последние изменения в файле остались закоммиченными. И новые изменения не отслеживаются!

3 окт 2020 в 10:47

В svne есть changelistы и ignore-on-commit, однако этот подход обычно считается неправильным.

В git’e под source control’ом должны располагаться файлы, изменения в которых должны попадать в репозиторий. Если файл больше не нужен в репозитории, то делайте git rm your-file-name .

Если вы временно внесли изменения в файл (например для тестирования) но не хотите их коммитить, то правильный подход — используйте git stash для этих файлов на время коммита.

Перестать следить за изменениями файла

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

Но есть два варианта пометить файл неизмененным: assume-unchanged и skip-worktree .

assume-unchanged

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

—assume-unchanged предпологает, что разработчик не должен изменять этот файл. Например, файлы библиотек или фреймворков.

git update-index --assume-unchanged path/to/file 

Снова начать отслеживать:

git update-index --no-assume-unchanged path/to/file 

skip-worktree

В этом случае файл всегда будет считаться неизмененным, даже когда git знает, что файл изменился или должен быть изменен (команда reset —hard ). Всегда будет использоваться локальная версия на момент блокировки от изменений. Отключается только явной командой.

—skip-worktree полезен когда надо заблокировать изменения в файле, который может меняться. Например, какие-либо конфигурационные файлы.

Заблокировать от изменений и отслеживания:

git update-index --skip-worktree path/to/file 

Разблокировать и начать отслеживать:

git update-index --no-skip-worktree path/to/file 

Добавить алиасы

Надо внести в ~/.gitconfig в секцию [alias] :

hide="update-index --assume-unchanged" unhide="update-index --no-assume-unchanged" hidden="!git ls-files -v | grep ^h | sed -e 's|h ||'" 
lock="update-index --skip-worktree" unlock="update-index --no-skip-worktree" locked="!git ls-files -v | grep ^S | sed -e 's|S ||'" 

Источники информации

  • man git-update-index
  • Сухой ответ по поведению флагов
  • Подробное объяснение работы флагов

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

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

Тем не менее, этот файл продолжает отображаться в git status после его редактирования. Как вы заставляете git полностью забыть об этом? .gitignore предотвратит добавление неотслеживаемых файлов (без add -f) в набор файлов, отслеживаемых git, однако git продолжит отслеживать любые файлы, которые уже отслеживаются. Чтобы остановить отслеживание файла, вам необходимо удалить его из индекса. Это может быть достигнуто с помощью этой команды.

git rm --cached

Если вы хотите удалить всю папку, вам нужно рекурсивно удалить все файлы в ней.
git rm -r —cached
Удаление файла из заголовка ревизии произойдет при следующем коммите.

git commit -am "Remove ignored files"

ВНИМАНИЕ Хотя это не удалит физический файл из вашего локального репозитория, он будет удалять файлы с машин других разработчиков при следующем git pull.

Игнорировать изменения файлов с помощью Git

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

В этой статье раскрываются следующие темы:

  • Игнорировать изменения в неотслеченных файлах с помощью .gitignore файла
  • Игнорировать изменения в неотслеченных файлах с помощью exclude файла
  • Прекращение отслеживания файла и пропуск изменений с помощью git update-index
  • Прекращение отслеживания файла и пропуск изменений с помощью git rm

Использование файла Gitignore

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

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

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

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

Visual Studio автоматически создает .gitignore файл для среды разработки Visual Studio при создании нового репозитория Git.

  • Visual Studio 2022
  • Visual Studio 2019 — меню Git
  • Visual Studio 2019 — Обозреватель команды

Visual Studio 2022 предоставляет возможности управления версиями Git с помощью меню Git, изменений Git и контекстных меню в Обозреватель решений. Visual Studio 2019 версии 16.8 также предлагает пользовательский интерфейс Git для команды Обозреватель. Дополнительные сведения см. на вкладке Visual Studio 2019 — team Обозреватель.

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

Снимок экрана: параметры контекстного меню для измененных файлов в окне

Visual Studio 2019 предоставляет возможности управления версиями Git с помощью меню Git, изменений Git и контекстных меню в Обозреватель решений.

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

Снимок экрана: параметры контекстного меню для измененных файлов в окне

Visual Studio 2019 версии 16.8 и более поздних версий предоставляет возможности управления версиями Git, сохраняя при этом пользовательский интерфейс Team Обозреватель Git. Чтобы использовать командную Обозреватель, снимите флажок Сервис>Параметры>Предварительные версии функций>Новый пользовательский интерфейс Git в строке меню. Функции Git можно использовать из любого интерфейса взаимозаменяемо.

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

Снимок экрана: параметры контекстного меню для измененных файлов в team Обозреватель в Visual Studio 2019.

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

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

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

Изменение файла Gitignore

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

Ниже приведены некоторые примеры распространенных шаблонов поиска файлов:

# Ignore all files with the specified name. # Scope is all repo folders. config.json # Ignore all files with the specified extension. # Scope is all repo folders. *.json # Add an exception so as to not ignore a file with the specified name. # Scope is all repo folders. !package.json # Ignore a file with the specified name. # Scoped to the 'logs' subfolder. /logs/test.logfile # Ignore all files with the specified name. # Scoped to the 'logs' subfolder and all folders beneath it. /logs/**/test.logfile # Ignore all files in the 'logs' subfolder. /logs/ 

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

Пользователи Windows должны использовать разделитель пути косой черты в .gitignore файле вместо обратной косой черты. Все пользователи должны добавить конечный / элемент при указании папки.

Использование глобального файла Gitignore

Файл можно назначить глобальным файлом .gitignore игнорирования, который применяется ко всем локальным репозиториям Git. Для этого используйте git config команду следующим образом:

git config core.excludesfile

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

Использование файла исключения

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

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

Так как Git не фиксирует и не отправляет exclude файл, его можно безопасно использовать для пропуска файлов в локальной системе, не затрагивая других пользователей.

Используйте Git update-index для игнорирования изменений

Иногда бывает удобно временно прекратить отслеживание локального файла репозитория и заставить Git игнорировать изменения в файле. Например, может потребоваться настроить файл параметров для среды разработки без риска фиксации изменений. Для этого можно выполнить git update-index команду с флагом skip-worktree :

git update-index --skip-worktree

Чтобы возобновить отслеживание, выполните git update-index команду с флагом —no-skip-worktree .

Или вы можете временно прекратить отслеживание файла и заставить Git игнорировать изменения в файле с помощью git update-index команды с флагом assume-unchanged . Этот параметр менее эффективен, чем skip-worktree флаг, так как assume-unchanged флаг может быть отменен операцией Git pull , которая изменяет содержимое файла.

git update-index --assume-unchanged

Чтобы возобновить отслеживание, выполните git update-index команду с флагом —no-assume-unchanged .

Используйте Git rm, чтобы игнорировать изменения

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

git rm --cached git commit

Затем используйте .gitignore запись файла или exclude , чтобы запретить Git сообщать об изменениях в файле.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *