Браузерные IDE хорошо убирают настройку. Но они не так хороши в следующем шаге: дать работе постоянное место за пределами профиля браузера. Обычно именно здесь появляется терминал: git init, remote add, commit, push. Синхронизация с GitHub в браузерной IDE сжимает эту последовательность до одной панели, но это не магия и не полноценный Git-клиент. Это точечный мост между проектом в хранилище браузера и репозиторием на GitHub. В этом руководстве объясняется, как мост работает в GB Coder, что именно загружается, как обрабатываются конфликты и токены, и где рабочий процесс с Git на десктопе по-прежнему лучше.
1. Зачем браузерной IDE нужен GitHub
Браузерный проект удобен именно тем, что ему не нужны папка, среда выполнения и установка. Это же свойство является его слабостью. Проекты живут в профиле браузера, который может очистить утилита, который теряется вместе с устройством или остаётся позади при смене компьютера. Экспорт в ZIP создаёт копию, но ZIP — это снимок без истории и общего remote. GitHub даёт недостающий слой: репозиторий вне устройства, историю коммитов, место для совместной работы и естественный источник для CI или развёртывания. Это меняет роль браузерной IDE. Она перестаёт быть одноразовым блокнотом и может стать местом, где небольшой проект пишется, проверяется и передаётся. Процесс особенно полезен на Chromebook, школьной машине или заблокированном корпоративном ноутбуке, где установить Git невозможно. Он также подходит для быстрого прототипа, который позже может переехать в десктопный репозиторий. Браузер делает первый черновик, GitHub делает его долговечным.
2. Что синхронизация делает, а что нет
GB Coder предлагает три действия GitHub: Push, New repo и Pull. Push записывает текущий проект в существующий репозиторий и ветку. New repo создаёт репозиторий в подключённой учётной записи GitHub и фиксирует проект как его начальное содержимое. Pull читает ветку и импортирует текстовые файлы в редактор. Все запросы идут напрямую из браузера на api.github.com; сервер LadeStack не стоит посередине и не хранит токен. Узкий охват выбран намеренно. Панель не заменяет командную строку Git. Она не предоставляет rebase, разрешение конфликтов слияния, сабмодули, Git LFS, подписанные коммиты, хуки или несколько remote. Она также не показывает полный граф коммитов. Эти ограничения важны для сложного репозитория. Для обычного браузерного проекта — статической страницы, прототипа на React, учебного примера или небольшой утилиты — три операции покрывают то, что действительно должно происходить за пределами вкладки.
3. Создание токена с правильной областью доступа
Синхронизация с GitHub использует токен личного доступа, а не пароль и не учётную запись GB Coder. Классическому токену нужна область repo. Fine-grained токену нужен доступ на чтение и запись к Contents, и его можно ограничить одним репозиторием. Более узкий вариант — лучший выбор по умолчанию: если токен утечёт, ущерб ограничится проектами, к которым он имеет доступ. Экран подключения ведёт на страницу токенов GitHub и объясняет оба варианта. Вставьте токен, решите, запоминать ли его на устройстве, и нажмите Connect. GB Coder проверяет его, получая учётную запись и список репозиториев, затем показывает логин и оставшийся лимит API. Ничего не записывается в репозиторий до подтверждения Push или создания репозитория. Относитесь к токену как к паролю: не вставляйте его в issue, чат или скриншот и отзывайте на GitHub, когда он больше не нужен. Токен со сроком действия и доступом к одному репозиторию — разумный компромисс для этого процесса.
4. Первый Push: что именно загружается
Вкладка Push запрашивает репозиторий, ветку, сообщение коммита и один необязательный параметр: удалять файлы, которых нет в проекте. Прежде чем что-либо покинет браузер, панель показывает количество файлов и общий размер. Этот предпросмотр полезен, потому что загрузка — не сырой дамп вкладок редактора. GB Coder использует тот же сборщик архива, что и экспорт ZIP и развёртывание. Простой проект HTML/CSS/JavaScript превращается в index.html, style.css, script.js и README. Проект React или Vue становится репозиторием со структурой Vite: index.html, package.json, vite.config.js, .gitignore, README и исходные файлы в src/. Папки зависимостей и результаты сборки не включаются. Сообщение коммита можно редактировать, по умолчанию оно равно «Update from GB Coder». Опция удаления отсутствующих файлов по умолчанию выключена; включайте её только если репозиторий должен точно отражать текущий проект, потому что она удаляет удалённые файлы, которых больше нет локально. Для первого Push выберите ветку по умолчанию, если только вам намеренно не нужна отдельная ветка.
5. Атомарные коммиты и пропуск неизменённых файлов
Наивная браузерная синхронизация коммитит по одному файлу. Это создаёт шумную историю и оставляет репозиторий наполовину обновлённым, если запрос срывается в середине. GB Coder вместо этого использует GitHub Git Data API: загружает blob-объекты, строит дерево поверх текущего дерева ветки, создаёт один коммит и перемещает ссылку ветки. Результат — один атомарный коммит на каждый Push, включая удаления, запрошенные соответствующей опцией. Вторая оптимизация тише, но не менее важна. Git идентифицирует содержимое файла по хешу SHA-1, и браузер может вычислить этот хеш локально с помощью WebCrypto. GB Coder сравнивает локальные файлы с целевым деревом перед загрузкой. Неизменённые файлы не тратят вызовы API, а Push без изменений возвращает «already up to date» вместо создания пустого коммита. Это сохраняет историю читаемой и оставляет бюджет API для реальных изменений. В небольшом проекте разница незаметна; в проекте с десятками файлов это разница между чистой синхронизацией и медленной, шумной.
6. Создание репозитория без выхода из браузера
Вкладка New repo создаёт репозиторий в подключённой учётной записи. Вы указываете имя и необязательное описание, выбираете публичный или приватный доступ и решаете, должен ли GitHub инициализировать репозиторий с помощью README. Инициализация включена по умолчанию, потому что у пустого репозитория нет головы ветки, на которой можно построить первый Push. GB Coder использует этот начальный коммит, заменяет README файлами проекта и записывает начальный коммит. Если инициализация выключена, он сам создаёт корневой коммит и ссылку на ветку по умолчанию. После создания новый репозиторий и ветка по умолчанию выбираются для следующего Push, поэтому второго этапа настройки нет. Это самый короткий путь от идеи к приватному репозиторию под версионным контролем. Он подходит для школьного задания, клиентской демонстрации, которая должна оставаться приватной, или прототипа, которому нужен URL для CI-сервиса. Репозиторий принадлежит учётной записи GitHub, владеющей токеном, а не LadeStack, и в дальнейшем им можно управлять, передавать или удалять на GitHub.
7. Возврат репозитория в редактор
Pull — это обратный путь. Введите URL репозитория или пару owner/name, выберите ветку, и GB Coder прочитает дерево ветки. Он импортирует текстовые файлы, которые редактор может осмысленно открыть: исходный код, JSON, Markdown, конфигурацию и SVG, среди прочего. Он пропускает каталоги node_modules, dist, build, .git, .next и coverage. Кроме того, Pull ограничен 200 файлами и 512 КБ на файл; если ветка превышает любой из лимитов, панель сообщает, сколько файлов было исключено, вместо того чтобы молча их отбросить. Переводы строк нормализуются, чтобы созданный в Windows файл не выглядел изменённым в каждой строке. Импортированные файлы не перезаписывают проект сразу. Они проходят тот же процесс проверки и применения, что и импорт ZIP, поэтому можно изучить обнаруженную структуру до подтверждения изменения и отменить его позже. Поэтому Pull — хороший способ продолжить работу на другом устройстве, изучить репозиторий перед редактированием или восстановить проект после очистки хранилища браузера. Это импорт, а не слияние; если текущий проект и ветка разошлись, внимательно проверьте результат.
8. Конфликты, лимиты API и честные сценарии отказа
Самое важное свойство безопасности — то, что происходит, когда удалённая ветка меняется во время редактирования. GB Coder обновляет ссылку ветки с отключённым force. Если кто-то другой успел сделать Push, GitHub отклоняет обновление, и панель сообщает о конфликте, а не молча отбрасывает чужую работу. Решение намеренно ручное: получите последнюю ветку в проект, проверьте файлы и отправьте снова — или перейдите в десктопный Git-клиент для настоящего слияния. Остальные ошибки разделены, чтобы сообщению можно было доверять и действовать по нему. Просроченный токен даёт ошибку аутентификации и запрос на повторное подключение. Ограничение скорости показывает, когда сбросится квота GitHub; API разрешает 5 000 запросов в час для аутентифицированных пользователей, а Pull тратит один запрос на файл. Отсутствующий репозиторий или ветка дают ошибку not-found. Запросы завершаются по тайм-ауту через 60 секунд, а долгую операцию можно отменить из панели. Эти детали не бросаются в глаза, но именно они отличают инструмент синхронизации, которому можно доверять, от инструмента, который отказывает неоднозначно.
9. Безопасность токена: по умолчанию только в сессии
Токены — ценные учётные данные. Токен GitHub с доступом на запись может изменить каждый доступный ему репозиторий. По умолчанию GB Coder хранит вставленный токен в map в области модуля, поэтому он исчезает при закрытии вкладки и никогда не записывается в localStorage. Опция «Remember on this device» — явное согласие. Если она включена и страница находится в безопасном контексте, токен перед сохранением запечатывается AES-GCM под случайным ключом каждой установки. Это защищает от читаемого токена в резервной копии профиля браузера, синхронизированном профиле, на общей машине, на скриншоте инструментов разработчика или в пакете поддержки. Это не защищает от скрипта, который может выполняться на том же origin, потому что такой скрипт может вызвать тот же модуль хранилища. Никакая браузерная схема не решает это полностью. Поэтому практические меры — область, срок действия и отзыв: используйте fine-grained токен, ограниченный нужным репозиторием, задайте срок действия и удалите токен на GitHub, когда работа закончена. Трафик GitHub идёт напрямую из браузера на api.github.com; LadeStack не нужно хранить учётные данные. Хранилище браузера по-прежнему не является резервной копией, поэтому репозиторий — разумная копия вне устройства.
10. Когда этого процесса достаточно, а когда нет
Синхронизации с GitHub достаточно для большой доли браузерных проектов: статического сайта, прототипа на React или Vue, учебного упражнения, небольшого внутреннего инструмента или демо, которому нужны remote и источник развёртывания. Она подходит независимому разработчику, который хочет контроль версий без установки Git, преподавателю, которому нужна воспроизводимая передача, и всем, кто работает на машине без терминала. Её недостаточно для монорепозитория с сабмодулями, репозитория, зависящего от Git LFS, команды, которой нужны подписанные коммиты или подробный обзор истории, а также процесса релиза на хуках и нескольких remote. Это задачи десктопного Git, и притворяться иначе означало бы ухудшить браузерный процесс. Полезный паттерн — гибридный. Начинайте в браузере, потому что первый предпросмотр доступен сразу. Делайте Push, когда проект приобрёл форму, которую стоит сохранить. Открывайте тот же репозиторий на десктопе, когда работе нужны нативные инструменты, более глубокий отладчик или полный Git-процесс. Возвращаясь в браузер, получайте изменения через GitHub с помощью Pull. Файлы — обычные исходники, поэтому передача является контролем версий, а не миграцией. Чтобы попробовать браузерную половину, откройте Projects Dashboard по адресу /app/projects, создайте проект, откройте GitHub sync и сделайте первый Push. Полная настройка и справочник функций — в документации.