Кажется, что файл все еще отслеживается после запуска `git update-index --assume-unchanged <file>`

Я выполнил команду git update-index --assume-unchanged .\src\main\resources\application.properties в моем локальном каталоге, а application.properties файл исчез из Changes раздел Source Control в VS Code, как я и ожидал.

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

Я также не могу переключать ветки по той причине, что «изменения будут перезаписывать этот файл»

Есть идеи, почему это происходит? Мне нужна базовая версия в моем удаленном репозитории, которую я могу изменить локально без отслеживания изменений.

Я видел --skip-worktree вариант и попробовал git update-index --skip-worktree .\src\main\resources\application.properties, но получили те же результаты.

Вот команды и вывод git

      PS C:\r\Body-Tracking-Uploader> git update-index --assume-unchanged .\src\main\resources\application.properties
PS C:\r\Body-Tracking-Uploader> git status
On branch upload-exerciseInfo-aws
Your branch is up to date with 'origin/upload-exerciseInfo-aws'.

nothing to commit, working tree clean
PS C:\r\Body-Tracking-Uploader> git branch
  main
* upload-exerciseInfo-aws
PS C:\r\Body-Tracking-Uploader> git checkout main
error: Your local changes to the following files would be overwritten by checkout:
        src/main/resources/application.properties
Please commit your changes or stash them before you switch branches.
Aborting
PS C:\r\Body-Tracking-Uploader>

2 ответа

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

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

Заманчиво попытаться использовать определенные функции git update-index, а именно биты accept-unchanged и skip-worktree, но они не работают должным образом для этой цели и не должны использоваться таким образом.

Если вы ищете способ справиться с конфигурацией в файлах конфигурации, а это похоже на то, что вы делаете, то в FAQ описано, как это сделать:

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

Я не совсем уверен, в чем проблема, но я предпринял следующие шаги

  1. Скопировал содержимое application.properties в отдельное место
  2. Восстановлено application.properties для соответствия удаленной версии
  3. Зафиксировал / отправил все изменения кода, связанные с моим прогрессом
  4. Слияние этой функциональной ветки с (она еще не завершена, но функционирует в своем текущем состоянии)
  5. Создана новая ветка функции в удаленном репозитории (для продолжения предыдущей функции WIP)
  6. Вытащил последний main в мой местный
  7. Побежал git update-index --skip-worktree .\src\main\resources\application.properties
  8. Проверил недавно созданную ветку функций
  9. Восстановлены мои локальные изменения в файле application.properties

Теперь изменения не отображаются в панели управления версиями и не мешают мне перемещаться между ветвями локально.

Другие вопросы по тегам