Как использовать `git worktree` и зачем он нужен?

git worktree позволяет создавать несколько рабочих директорий, связанных с одним репозиторием Git. Это полезно для одновременной работы над разными ветками или фичами, не переключаясь между ними и не создавая конфликты. Например, можно одновременно разрабатывать новую функциональность в одной worktree и исправлять баг в другой, основанной на другой ветке. Использование git worktree add <путь> <ветка> создает новую рабочую директорию, а git worktree remove <путь> удаляет её. Удаление worktree не удаляет ветку в репозитории.

git worktree - это мощный инструмент Git, позволяющий иметь несколько рабочих копий (working directories) одного и того же репозитория одновременно, привязанных к разным веткам или коммитам. Это означает, что вы можете работать над несколькими фичами, исправлять баги или тестировать разные версии проекта параллельно, не переключаясь постоянно между ветками и избегая потенциальных конфликтов.

Зачем нужен git worktree:

  • Параллельная разработка: Работа над несколькими задачами одновременно, не затрагивая основной рабочий каталог. Например, можно разрабатывать новую функциональность в одной рабочей копии и исправлять критический баг в другой.
  • Быстрое переключение контекста: Нет необходимости выполнять git checkout, который может быть ресурсоемким, особенно для больших репозиториев. Переключение между рабочими копиями происходит мгновенно.
  • Проверка исправлений для релизов: Создание рабочей копии для конкретного тега релиза, чтобы проверить исправление бага без риска внести изменения в активную ветку разработки.
  • Эксперименты: Возможность проводить эксперименты с кодом в изолированной рабочей копии, не загрязняя основную рабочую среду.
  • Поддержка старых версий: Легко переключаться на старые версии проекта для отладки или анализа, не прерывая текущую работу.
  • Совместное использование репозитория разными процессами: Например, один процесс может собирать документацию из одной рабочей копии, а другой - запускать тесты из другой.

Как использовать git worktree:

  1. Добавление рабочей копии:
    git worktree add <путь_к_новой_рабочей_копии> [<ветка_или_коммит>]
    Пример: git worktree add feature/new-feature (создаст рабочую копию в папке `feature/new-feature` и переключит её на ветку `feature/new-feature`)
    Пример: git worktree add hotfix/urgent-bug origin/release/1.2.3 (создаст рабочую копию в папке `hotfix/urgent-bug` и переключит её на ветку `origin/release/1.2.3`)
  2. Список рабочих копий:
    git worktree list
    Покажет список всех рабочих копий, связанных с репозиторием, а также их текущие ветки.
  3. Удаление рабочей копии:
    git worktree remove <путь_к_рабочей_копии> (если рабочая копия не содержит незафиксированных изменений)
    git worktree force remove <путь_к_рабочей_копии> (для принудительного удаления, даже если есть незафиксированные изменения - будьте осторожны!)
  4. Перемещение рабочей копии:
    git worktree move <путь_к_старой_рабочей_копии> <путь_к_новой_рабочей_копии>
  5. Блокировка рабочей копии:
    git worktree lock <путь_к_рабочей_копии> [<причина>] (предотвращает удаление)
  6. Разблокировка рабочей копии:
    git worktree unlock <путь_к_рабочей_копии>

Важно помнить:

  • Каждая рабочая копия имеет свою собственную папку .git, но все они разделяют один и тот же репозиторий .git (общий для всех рабочих копий и расположенный в основном репозитории).
  • Нельзя одновременно находиться в нескольких рабочих копиях в одном терминале. Каждый терминал должен быть настроен на работу только с одной рабочей копией.
  • git worktree prune удаляет метаданные о рабочих копиях, которые больше не существуют. Это полезно для очистки репозитория после удаления рабочих копий вручную.
  • git branch --show-current покажет текущую ветку для активной рабочей копии.

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

0