Как перестать отслеживать файл 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 золотой знак 20 20 серебряных знаков 29 29 бронзовых знаков

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

3 окт 2020 в 10:47

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

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

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

Как перестать отслеживать файл в локальном Git?

Подскажите новичку в Git:
есть локальный репозиторий (для изучения гит). Есть некие файлы, и один из файлов ‘two.txt’ (уже проиндексированный), нужно оставить на диске, но исключить из области отслеживания.
В книге «GIT для профессионального программиста» прописана команда, которой я и воспользовался:
git rm —cached two.txt
Статус показал следующую картину:

$ git status On branch master Changes to be committed: (use "git restore --staged . " to unstage) deleted: two.txt Untracked files: (use "git add . " to include in what will be committed) two.txt

Вопрос: как избавиться от отображения информации, что файл не отслеживается?
Я закоммитил это изменение:

$ git commit -a -m 'two.txt not indexed' [master d4f42ee] two.txt not indexed 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 two.txt

Однако строка с информацией о наличии неотслеживаемого файла все равно присутствует:

$ git status On branch master Untracked files: (use "git add . " to include in what will be committed) two.txt nothing added to commit but untracked files present (use "git add" to track)

В чем моя ошибка или непонимание?
В книге этот момент вообще не освещён.
На Тостере есть три сообщения по этому вопросу, но они лишь повторяют те команды, которые я вводил и безрезультатно.
Спасибо.

  • Вопрос задан более трёх лет назад
  • 9293 просмотра

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

В 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.

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

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