# Проекты и worktree Вкладка проекта подключает CodeNomad к папке на компьютере серверной части. Открытие вкладки, просмотр рабочей копии и перемещение семейства разговоров — разные операции. ## Открытие проекта {#open-project} 1. Нажмите **Новый экземпляр** (`+`), чтобы открыть главную страницу. 2. Выберите **Обзор папок**, укажите папку серверной части и откройте её; либо выберите запись в **Недавние папки**. 3. Для копирования репозитория выберите **Клонировать Git-репозиторий**, заполните **URL репозитория** и **Папка назначения**, затем нажмите **Клонировать**. Просмотр удалённого сервера означает просмотр его файловой системы, а не телефона или ноутбука. Открытие проекта не создаёт отдельный демон OpenCode для каждой вкладки. Разговоры — нативные сессии OpenCode; их время жизни не совпадает со временем жизни вкладки. Клонирование записывает репозиторий в папку назначения. Параметр **Сначала удалить папку назначения, если она уже существует.** разрушителен: включайте его, только если всё уже находящееся там можно удалить. Если не уверены, используйте новую папку. Неудачное клонирование не повод удалять существующий проект; перед повтором проверьте указанные папку назначения и ошибку. Недавние записи — это ярлыки. **Переименовать рабочее пространство** меняет отображаемое имя; **Убрать из недавних** удаляет ярлык, но не файлы и разговоры. Щелчок по уже открытому недавнему проекту открывает новую вкладку; его кнопка **Открыта** (**Перейти к открытому проекту**) вместо этого выбирает существующую вкладку. ## Меню нового экземпляра {#new-instance-launcher} 1. Удерживайте `+` или щёлкните правой кнопкой; когда на ней фокус, используйте **Alt+Down**, **Shift+F10** или клавишу Menu. 2. Найдите недавний проект либо выберите **Обзор…**, **Временный** или **Клонировать…**. Обычное нажатие по-прежнему открывает полную главную страницу. Меню — быстрый переход, а не средство управления: переименовывайте/удаляйте недавние проекты и управляйте закладками серверов на главной странице. Escape закрывает меню и возвращает фокус на `+`. ## Закрытие вкладки проекта {#close-stop} 1. Нажмите кнопку закрытия вкладки или выполните **Закрыть вкладку** в палитре команд (`Ctrl/Cmd+W` в интерфейсе). 2. Закрытие вкладки закрывает этот проект в CodeNomad: он перестаёт следить за его событиями и запросами. Сессии продолжают работать в OpenCode. 3. Снова откройте папку через обзор или недавние записи, чтобы найти эти разговоры. | Действие | Область и эффект | Чего не делает | | --- | --- | --- | | Закрыть вкладку | Убирает подключение CodeNomad к проекту этой вкладки; отдельно открытая вкладка той же папки не затрагивается | Не удаляет файлы проекта или нативную историю, не останавливает сессии и не выгружает Location из OpenCode | | Остановить сессию | Выполнение выбранного разговора | Не закрывает проект и не удаляет историю | Если то же подключение проекта показано в другом окне, его вкладка тоже закрывается, и это окно показывает уведомление. Окно, начавшее закрытие, уведомления не показывает. Закрытие происходит сразу; если серверная часть не может закрыть проект, появляется ошибка, а **Перейти к открытому проекту** на главной странице по-прежнему ведёт к нему. Автоматического повтора нет. Неотправленные черновики закрытой вкладки не сохраняются для восстановления при запуске. Закрытие всего окна, выход или перезагрузка не закрывают его подключения проектов; обычное восстановление при запуске продолжает действовать. Если нужно убедиться в завершении выполнения, явно остановите соответствующие запуски. CodeNomad никогда не выгружает нативные Location; обслуживание общей службы описано в разделе [настройки OpenCode](opencode.md). ## Временные рабочие пространства {#temporary-workspaces} 1. Выберите **Временный** в меню или **Новый временный экземпляр** на главной странице. 2. Работайте в пустой папке под управлением CodeNomad; Git автоматически не инициализируется. 3. При закрытии вкладки выберите **Сохранить**, **Удалить** или **Отмена**. В меню вкладки также есть **Сохранить как проект**. | Выбор | Эффект | Восстановление | | --- | --- | --- | | Сохранить | Закрывает проект в CodeNomad, сохраняет папку и разговоры, убирает временный статус и добавляет недавний проект | Откройте из недавних; папка не перемещается | | Удалить | Удаляет разговоры и файлы временного рабочего пространства | Отмены нет; сначала сохраните нужное в другом месте | | Отмена | Оставляет временное рабочее пространство открытым | Продолжайте работу или решите позже | Нетронутая временная вкладка без разговора, файлов и неотправленного черновика при закрытии удаляется без вопроса. Открытые временные вкладки участвуют в обычном восстановлении при запуске, но на главной странице нет отдельного списка для возврата к закрытым временным папкам. Удаление запрещено, пока разговор выполняется или папка открыта в другой вкладке/окне. Сначала остановите запуск и закройте другие виды. При неудачном удалении пространство остаётся временным: устраните указанную проблему и повторите, а не удаляйте родительский каталог вручную. ## Выбор или создание worktree {#select-create-worktree} 1. Откройте родительский разговор и используйте переключатель worktree в поле ввода. На узких экранах это элемент только со стрелкой. 2. Выберите найденный worktree или **+ Создать worktree**. 3. Для создания заполните **Имя** и выберите **Создать и использовать worktree**. CodeNomad обнаруживает worktree через OpenCode и проверяет принадлежность открытому репозиторию. Новая ветка начинается с HEAD выбранной рабочей копии. Имя существующей ветки использует её текущую ревизию; Git может отказать, если ветка уже открыта в другом месте. По умолчанию worktree размещаются в `.codenomad/worktrees`. Незакоммиченные изменения остаются в исходной рабочей копии; создание не копирует их в новый worktree. Переключатель в поле ввода перемещает родительский разговор и всех его рекурсивных потомков как проверенное семейство. Подсессия не может менять этот переключатель независимо. Активные сессии блокируют операцию: дождитесь завершения семейства или сначала остановите его выполнение. Дождитесь завершения перемещения перед следующим; при ошибке проверьте обновлённое состояние разговора/worktree перед повтором. Напротив, **Просматриваемое рабочее дерево** в разделе [Файлы](files.md) меняет только рабочую копию, читаемую панелью. Это не перемещает разговор, не переключает ветку и не меняет место выполнения следующей команды оболочки. ## Удаление worktree {#remove-worktree} 1. В списке worktree поля ввода используйте **Удалить worktree** для удаляемого worktree ветки. 2. Проверьте целевую папку. Не включайте **Удалить принудительно (отбросить локальные изменения)**, если потеря локальных изменений недопустима. 3. Подтвердите удаление и проверьте итоговый список. Удаление убирает локальную папку worktree. Основная рабочая копия Git не подлежит такому удалению. CodeNomad возвращает затронутые семейства разговоров в корневую рабочую копию и проверяет их размещение перед удалением worktree; активные сессии могут блокировать удаление. Это не архив и не резервная копия незакоммиченных файлов. Если Git отказывает из-за изменённых/неотслеживаемых файлов, сохраните или очистите их перед повтором. Принудительное удаление явно отбрасывает их. При блокировке каталога закройте использующие его терминалы, редакторы, наблюдатели и фоновые процессы. Если запись отсутствует, обновите worktree и проверьте путь перед повтором. Для передачи диагностики в окне ошибки есть **Копировать обезличенную**; сначала проверьте даже обезличенный текст. ## Инициализация Git и работа без него {#initialize-git} 1. Для обычной папки при доступном Git откройте **Файлы → Изменения** или **Коммиты**. 2. Выберите **Инициализировать Git**. Действие выполняется сразу, без дополнительного подтверждения. 3. Дождитесь обновления метаданных проекта и разговоров; используйте **Обновить**, если Git инициализирован вне CodeNomad. Инициализация создаёт репозиторий в явно открытой папке, а не в родительской. Коммит не создаётся. При ошибке прочитайте сообщение и обновите состояние перед повтором: запрос с неопределённым ответом автоматически не повторяется. Если серверная часть не может запустить Git, разговоры и ограниченный просмотр файлов остаются доступны для явно открытой папки в режиме только каталога. Операции worktree и инициализация Git требуют Git в этой серверной части. См. [установку](install.md) и [файлы](files.md).