Статьи

GitTip: пропустить WorkTree

Используйте skip-worktree, чтобы проникнуть в изменения, которые git не заметит

GitTip: пропустить WorkTree

Этот совет прост и силен в равных частях. Мы хотим добиться изменения локального файла, который git не может идентифицировать как измененный, несмотря на то, что он уже отслежен. Для этого примера у меня есть файл «config.txt» с содержанием: «секрет». Этот файл хорошо работает во всех средах, но в локальной среде мне нужно изменить его для тестирования. Нет проблем: он изменен, проведены соответствующие тесты, он отменен и загружен.

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

Вы также можете насладиться:  ретроспектива Git 2016: Worktrees

Мой коллега из Apiumhub (спасибо  Альваро Гарсии ) рассказал мне о команде git update-index –assume-unchanged , и я должен сказать, что она сделала то, что мне было нужно. Это позволило мне изменить файл в локальной среде, а git не обнаружил его, поэтому я мог продолжать вносить изменения в другие файлы и фиксировать файлы с моим любимым,  git add не беспокоясь ни о чем.

На следующем изображении мы можем видеть, как работает  git status показывает нам два файла, config.txt и otrofichero.sh. Как мы уже говорили, мы не хотим загружать config.txt, это изменение в локальной среде, и мы не хотим беспокоиться об этом. После запуска команды   update-index файл config.txt исчезает из рабочей области.

Файл все еще существует, и git не собирается его обновлять, если не произойдут две вещи:

  • Ручная деактивация бита, которым мы пометили этот файл (предположим, без изменений)
  • Вытащить и изменить этот файл через апстрим

Перед этим последним сценарием, в котором мы беспокоимся о файле, мы должны просмотреть каждый запрос, чтобы увидеть, был ли бит удален или нет командой   git ls-files -v :

Здесь мы видим, что config.txt помечен строчной буквой «h», а otrofichero.sh — буквой «H» в верхнем регистре. Эта буква представляет разницу между файлом, кэшированным git, и другим файлом, который не является.

Короче говоря, эта команда не работает для нашего варианта использования. Основываясь на документации, эта команда помечает большие файлы как «не кэшированные» и повышает нашу производительность с помощью git. Если мы хотим, чтобы git не просматривал конкретный файл, мы ищем следующий вариант   –skip-worktree :

Я не буду вдаваться в подробности, так как этот последний вариант похож   assume-change , но он сохраняет флаг до того, как потянет.  Assume-change следует использовать для больших файлов, отслеживаемых git, таких как SDK и т. д., в то время как skip-worktree больше соответствует изменениям конфигурации для тестов локальной среды, поэтому не нужно беспокоиться о загрузке их в наш удаленный репозиторий.

Сказав это, здесь очень полезные псевдонимы git, связанные со статьей. Имя самого псевдонима определяет действие, которое он выполняет:


Оболочка