Исследование продукта · 27 октября 2026 г.

Рабочие деревья Claude Code: Проверьте одно изолированное изменение

Дайте Claude Code отдельный Git checkout, проверьте одно изменение по ключу ответа и верните только проверенное изменение в экспериментальной среде.

Время чтения
7 мин
Проверено
27 октября 2026 г.
Две бумажные карточки на отдельных угольных ветвях, с охровой инспекционной линзой над синей рабочей областью
Отделите изменение от вашего исходного checkout, затем проверьте точно то, что вернётся.
Итог

Используйте отдельный checkout для агента, осмотрите обе директории и перенесите изменение только после того, как его байты и область пройдут вашу проверку.

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

Источники проверены 27 октября 2026 г. Мы протестировали локальную настройку Git, сравнения, передачу патчей и очистку с вручную смоделированным изменением, включая отрицательные проверки. Мы не запускали аутентифицированную сессию Claude. Шаг агента — это документированный рабочий процесс для проб, а не сообщаемый успех модели.

Вам нужны Bash, Git с работоспособной идентификацией коммита и установленный, аутентифицированный Claude Code. Используйте синтетический фикстур ниже в новой временной директории. Удаленный репозиторий или push не требуется.

Настройте два проекта и ключ ответов

Git’s worktree manual описывает связанные рабочие директории, которые используют один репозиторий, но сохраняют свои собственные HEAD и индекс. Мы создадим рабочую директорию явно, чтобы начальный коммит, ветка и директория были видны до начала работы Claude.

Запустите это в терминале вне ваших рабочих проектов:

lab_root=$(mktemp -d /tmp/claude-worktree-lab.XXXXXX)
mkdir "$lab_root/project "$lab_root/evidence
cd "$lab_root/project
git init -q
printf 'Выпуск: Lantern\nОбзор: в ожидании\n' > release.txt
git добавить release.txt
git коммит -m "Записать базовую версию контрольного списка выпуска"

Остановитесь, если коммит не удается. Исправьте свою локальную идентификацию Git перед продолжением. Затем запишите исходный и точно ожидаемый результат вне обоих чек-аутов:

cp release.txt "$lab_root/evidence/original.txt"
printf 'Выпуск: Lantern\nОбзор: готов\n' > "$lab_root/evidence/expected.txt"
git rev-parse HEAD > "$lab_root/evidence/baseline-commit.txt
git рабочее-древо добавить -б review-copy "$lab_root/review" HEAD
git рабочее-древо список
printf 'Корень лаборатории: %s\n' "$lab_root"

Список должен содержать project и review. Второй чек-аут должен быть на review-copy, начиная с базового коммита. Сохраните напечатанный путь lab-root для дальнейшего использования. Ключ ответа отражает наше редакционное решение: изменять следует только статус обзора; имя релиза и финальный перенос строки должны оставаться неизменными.

Рабочее дерево (worktree) отделяет проверенные файлы. Оно не ограничивает процесс этой папкой, не лишает сетевого доступа и не изолирует учетные данные. Сохраняйте обычные права доступа. Каталог с доказательствами находится за пределами запрашиваемого изменения, но он не защищен от всего, что запускается от имени вашего пользователя.

Запустите Claude в каталоге обзора

В том же терминале:

cd "$lab_root/review"
пвд
git ветка --показать-текущую
клод --version > "$lab_root/evidence/cli-version.txt
клод

Перед запуском убедитесь, что каталог заканчивается на /review и что ветка review-copy. Если Claude запрашивает доверие к папке, проверьте этот путь. Пересмотрите любые одобрения инструментов вместо того, чтобы их обходить.

Отправьте этот запрос:

Прочитайте release.txt в этой рабочей директории. Измените только "Review: pending"
на "Review: ready". Сохраните название релиза и итоговую пустую строку.
Используйте инструмент для редактирования файлов. Не изменяйте никакие другие файлы, не проверяйте соседние папки,
не выполняйте команды оболочки, не создавайте коммиты, не переключайте ветки и не свяжитесь с удалённым репозиторием.
Остановитесь после редактирования и сообщите, какой файл был изменён.

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

Anthropic’s руководство по общим рабочим процессам также документы claude --worktree feature-auth для начала сессии в отдельной копии. Эти Справочник CLI размещают те управляемые копии под .claude/worktrees/. Это упражнение уже создало свою версию с Git: запустите обычный claude там, без добавления --worktree и создания другой директории.

Проверьте результат вне сеанса агента

Продолжайте в тот же shell после выхода Клода. Если вы открыли новый терминал, сначала установите lab_root на точный путь, показанный ранее. Выполните следующие проверки по отдельности и остановитесь при любой ошибке:

cmp "$lab_root/evidence/expected.txt" "$lab_root/review/release.txt"
cmp "$lab_root/evidence/original.txt" "$lab_root/project/release.txt"
git -C "$lab_root/review" различие HEAD -- release.txt
git -C "$lab_root/review" статус --коротко --untracked-files=all
git -C "$lab_root/project статус --коротко --untracked-files=all
git -C "$lab_root/review" rev-parse HEAD > "$lab_root/evidence/review-commit.txt"
cmp "$lab_root/evidence/baseline-commit.txt "$lab_root/evidence/review-commit.txt"
git -C "$lab_root/project rev-parse HEAD > "$lab_root/evidence/project-commit.txt"
cmp "$lab_root/evidence/baseline-commit.txt "$lab_root/evidence/project-commit.txt"

Каждая cmp должна завершиться с нулевым кодом без вывода. Версия обзора должна показывать ровно один изменённый путь, release.txt; статус исходной проверки должен быть пустым. Дифф должен содержать одну замену: pending становится ready. Оба сравнения коммитов должны пройти, потому что в этом упражнении Клод попросил не делать коммит.

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

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

Передавайте только рассмотренный патч

После того как все вышеуказанные проверки пройдут, сохраните и проверьте патч:

git -C "$lab_root/review" различие --binary HEAD -- release.txt \
  > "$lab_root/evidence/review.patch
кот "$lab_root/evidence/review.patch

Требуется непустой патч, затрагивающий только release.txt, с одной предполагаемой заменой. Не применяйте патч, содержание которого вы не проверяли. Затем:

cd "$lab_root/project
git apply --проверка "$lab_root/evidence/review.patch && \
  git apply "$lab_root/evidence/review.patch
cmp "$lab_root/evidence/expected.txt" release.txt
git различие --проверка
git различие -- release.txt
git статус --коротко --untracked-files=all

Остановитесь, если применение или сравнение не удается. В противном случае требуйте только предполагаемое release.txt изменение, затем сделайте локальный коммит лаборатории:

git добавить release.txt
git коммит -m "Принять обновление проверочного списка"
git статус --коротко

Статус теперь должен быть пустым. Этот перенос на основе патчей намеренно ограничен одним отслеживаемым текстовым файлом в нашем упражнении. Для настоящей функции с новыми файлами, переименованиями или несколькими коммитами разработайте более широкий процесс обзора и интеграции, а не копируйте эти точные фильтры путей.

Сохраняйте рабочее дерево до безопасной очистки

Наш checkout для обзора все еще содержит свои несохраненные изменения. Документация Git по рабочему дереву говорит, что обычное удаление отказывается от грязного checkout. Сохраните эту защиту: не добавляйте --force только для завершения лабораторной работы.

После подтверждения того, что принятый файл закоммичен в project, также сохраните проверенное состояние на его собственной ветке:

cd "$lab_root/review"
git добавить release.txt
git коммит -m "Сохранить результат проверенного рабочего дерева"
git статус --коротко

Продолжайте только если статус пустой и Клод вышел. Удалите отдельный рабочий каталог из исходной проверки:

cd "$lab_root/project
git рабочее-древо удалить "$lab_root/review"
git рабочее-древо список
git ветка --список review-copy
cmp "$lab_root/evidence/expected.txt" release.txt

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

Диагностика неудачной проверки изоляции

НаблюдениеЧто проверить далее
Создание рабочей области не удалосьПодтвердите, что существет базовый коммит и запрашиваемая ветка или каталог ещё не используются. Выберите новую лабораторию вместо принудительного повторного использования.
Изменения исходного файла перед переносомПроверьте каталог, где запускался Клод, и пути, используемые его инструментами. Запишите неудачную проверку изоляции.
Статус обзора содержит дополнительные путиПроверьте каждый файл, а также любые локальные хуки или кастомизации перед продолжением.
Сравнение коммитов не удалосьПросмотрите новые коммиты; больше не рассматривайте это как задание с редактированием без коммита.
Проверка патча не прошлаСохраните патч, проверьте исходную копию и устраните несоответствия перед применением любых изменений.
Удаление рабочей копии отказаноПроверьте изменённые, неотслеживаемые и игнорируемые файлы. Сохраните всё нужное перед повторной попыткой обычного удаления.

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

Основные источники проверены

Все проверено 27 октября 2026:

Запустите это в работу

Различайте отдельную проверку Git и песочницу для безопасности.

Попробовать

Попросите Claude обновить один синтетический контрольный список релиза в временной рабочей директории.

Докажите, что это сработало

Сравнивайте точные байты, проверяйте, что оригинал не изменен, и инспектируйте патч перед его применением.

Держите в поле зрения

  • Начните с зафиксированной базовой версии и предоставьте Claude собственную рабочую директорию.
  • Проверяйте отредактированный файл, измененные пути и оригинальную проверку независимо.
  • Держите рабочее дерево до тех пор, пока рассмотренное изменение не будет перенесено и проверено.
Изучите рабочий процесс: Определите критерии приемки для работы AI по программированию