Эта интеграция относится к режиму [**Создатель**](/docs/builder/overview) — конструктору, который генерирует веб-проект по вашему описанию. Приложение GitHub здесь решает одну конкретную задачу: перенести готовый проект из Создателя в ваш репозиторий и, при необходимости, забрать код в обратную сторону. Подключение занимает пару шагов и не создаёт на GitHub ни новых репозиториев, ни веток, ни автоматических подписок на события. Если вы имеете в виду работу с git из десктопного агента WorkAI (клонирование, коммиты, ветки в терминале) — это не эта страница. [Агент](/docs/agent/overview) работает с git локально обычными командами, отдельного подключения к GitHub для этого не требуется. Ревью пул-реквестов, комментариев в issues и запусков проверок на стороне GitHub интеграция не делает — если вы ждёте этого по опыту других редакторов, здесь такого нет. ## Что делает интеграция Есть два направления: - **Выгрузка (экспорт).** Вы привязываете проект Создателя к репозиторию, и по кнопке «Синхронизировать» WorkAI собирает файлы последней версии проекта, создаёт отдельную экспорт-ветку и открывает в неё pull request. Повторная синхронизация не плодит новые PR — она добавляет коммит в ту же ветку и обновляет уже открытый. - **Импорт.** Существующий репозиторий можно импортировать — из него создаётся **новый** проект Создателя. Текущий открытый проект при этом не меняется. Чего интеграция не делает: не читает issues, не запускает проверки и не подписывается на события в репозитории сверх того, что нужно для собственных веток и PR. Обмен всегда начинается с вашего действия в WorkAI. ## Как подключить репозиторий 1. В открытом проекте Создателя откройте меню **«Ещё»** и выберите **«Подключить GitHub»** (в компактной раскладке меню тот же пункт подписан **«Экспорт в GitHub»**). 2. WorkAI откроет страницу установки приложения на github.com. Там вы выбираете аккаунт или организацию и решаете, каким репозиториям дать доступ — всем или только выбранным. 3. После подтверждения GitHub вернёт вас обратно в проект. - Если репозиторий с правом записи ровно один, WorkAI сразу привяжет его и выполнит первую выгрузку. - Если их несколько — откроется список «Выберите репозиторий», где вы указываете нужный. 4. После привязки в шапке проекта появляется имя репозитория и кнопки **«Синхронизировать»** и **«Отключить»**. Ссылка на установку живёт **10 минут**. Если вернуться с GitHub позже, подключение не состоится: браузер откроет список проектов Создателя без объяснения. Откройте проект и начните с первого шага заново. Подключать репозиторий, синхронизировать и отключать его может только владелец проекта: у участника с ролью ниже эти действия недоступны. ## Какие права запрашивает приложение | Право | Зачем | | --- | --- | | Чтение и запись содержимого репозитория | Записывать файлы проекта при выгрузке и скачивать содержимое при импорте | | Чтение и запись pull request'ов | Открывать экспорт-PR и находить уже открытый PR при повторной синхронизации | | Чтение метаданных репозитория | Получать список репозиториев, их видимость и ветку по умолчанию | Больше приложение ничего не запрашивает: доступа к issues, Actions, настройкам репозитория и участникам у него нет. Отдельно при подключении вы проходите обычную авторизацию GitHub. Она нужна, чтобы WorkAI видел ровно тот срез репозиториев, к которому есть доступ **у вас лично**, а не всё, что видит установленное приложение. В организации это важно: приватные репозитории, к которым вас не добавили, в списке не появятся. Список прав доступа перепроверяется при каждой операции — если доступ отозвали на стороне GitHub, выгрузка не пройдёт, а не отработает вслепую. ## Что происходит при первой выгрузке WorkAI берёт файлы последней версии проекта, создаёт от ветки репозитория по умолчанию отдельную экспорт-ветку, коммитит в неё файлы и открывает pull request с заголовком `WorkAI export: v<номер версии>` — по нему видно, какой версии проекта соответствует выгрузка. - **Репозиторий пустой.** Экспорт-ветка инициализируется первым файлом проекта, дальше коммит собирается обычным образом. - **В репозитории уже есть код.** Коммит в экспорт-ветке ложится поверх текущего состояния ветки по умолчанию: файлы проекта добавляются и перезаписываются по совпадающим путям. Построчного слияния нет — файл с тем же путём заменяется целиком версией из Создателя. - **Файлы, которых нет в проекте, не удаляются.** Если раньше вы выгрузили файл, а потом он исчез из проекта, в репозитории он останется. Коммит в экспорт-ветке подписан от имени приложения WorkAI (Verified). Кроме исходников в коммит попадают служебные файлы проекта — `Dockerfile`, `nginx-default.conf`, `workai-template.json`. Это часть проекта на стороне WorkAI: по ним платформа собирает и публикует сайт. Править в репозитории их — как и любые другие файлы проекта — смысла нет: следующая выгрузка вернёт версию из Создателя. ## Как выгружать изменения дальше Выгрузка не происходит сама после каждой генерации — её запускает кнопка **«Синхронизировать»** в шапке проекта. Рядом всегда видно имя привязанного репозитория и результат последней попытки: при неудаче появляется пометка «— ошибка синка», а текст ошибки показывается подсказкой. Провал никогда не выглядит как успех. Повторная синхронизация не открывает новый pull request: WorkAI находит уже открытый PR из экспорт-ветки этого проекта и добавляет в него ещё один коммит. В интерфейсе рядом с кнопкой синхронизации видна ссылка на этот PR. Ограничение по размеру: один файл проекта не должен превышать 50 МБ — файл больше этого лимита выгрузку останавливает с явной ошибкой. ## Можно ли выгружать проект сразу в несколько репозиториев Нет: у проекта в каждый момент ровно один привязанный репозиторий. Если подключить GitHub заново и выбрать другой репозиторий, привязка не добавится, а заменит прежнюю — дальше выгрузки пойдут только в новый. Коммиты, уже сделанные в старом репозитории, остаются на месте, но обновляться перестанут. Обратное ограничение платформа не проверяет: в один и тот же репозиторий может выгружаться несколько разных проектов Создателя. У каждого — своя экспорт-ветка и свой PR, поэтому синхронизации сами по себе файлы друг друга не перезаписывают. Но если смержить оба PR, второй мерж ляжет поверх первого тем же снимком своего проекта — конфликт путей всё равно возникнет, просто на шаге мержа, а не выгрузки. Держите один репозиторий на проект. ## Как импортировать существующий репозиторий В меню **«Ещё»** есть отдельное действие **«Из GitHub»** (в компактной раскладке — **«Импортировать из GitHub»**) — оно создаёт из репозитория новый проект Создателя. Порядок тот же: установка приложения (если ещё не установлено), выбор репозитория в окне **«Импортировать репозиторий»**, затем WorkAI скачивает содержимое ветки по умолчанию и собирает из него проект. Импортированный проект сразу привязывается к тому же репозиторию, поэтому обратная выгрузка работает без дополнительных шагов. По завершении показывается экран с итогом: сколько файлов приехало, что было пропущено и какие есть предупреждения. Такой же импорт доступен из GitLab.com — он тоже создаёт новый проект, но обратной выгрузки в GitLab нет, см. [подключение GitLab](/docs/integrations/gitlab). Импорт — это разовый снимок содержимого. Он не подписывается на изменения в репозитории: новые коммиты, сделанные вами в GitHub после импорта, в проект Создателя не подтягиваются. ## Какие проекты импорт не принимает Создатель публикует собранную статику, поэтому проекты, которым в продакшене нужен собственный серверный процесс, отклоняются сразу — с объяснением, а не «импортируются» и потом молча не собираются. | Что в репозитории | Результат импорта | | --- | --- | | Vite | Принимается, сборка `npm run build` | | Create React App | Принимается, каталог сборки `build/` | | Готовая статика с `index.html` в корне | Принимается как есть, без сборки | | Другой инструмент сборки | Принимается, но платформа ждёт результат в `dist/` — иначе страница будет пустой | | Next.js, Nuxt, Remix, SvelteKit, Astro, Angular CLI | Отклоняется: это другой контур публикации | | Нет ни `package.json`, ни `index.html` в корне | Отклоняется: непонятно, как собирать | Импорт также откажет, если в `package.json` нет команды сборки и при этом нет собранного `index.html` в корне. ## Что не попадёт в импортированный проект Импорт берёт исходники и осознанно отбрасывает остальное. Всё пропущенное перечисляется на экране результата — сгруппированно, с причиной. | Что пропускается | Почему | | --- | --- | | `.env`, ключи, учётные данные | Секретам не место в платформе | | `node_modules`, `dist`, `build`, `.git` и подобные каталоги | Это не исходники, а результат сборки и зависимости | | Картинки, шрифты, архивы и другие двоичные файлы | Импорт работает с текстовыми файлами | | Файлы больше 256 КБ | Ограничение на отдельный файл | Кроме того, действуют потолки: не более 800 файлов и 8 МБ исходников суммарно. Их превышение не отменяет импорт: лишние файлы просто не приезжают, попадают в список пропущенных и на экране результата появляется предупреждение, что часть файлов осталась за бортом. Проверьте состав проекта, прежде чем публиковать его. А вот скачиваемый архив репозитория ограничен 12 МБ (в сжатом виде; на распакованный объём и число записей действуют свои внутренние потолки), и это уже отказ: импорт не начнётся и предложит убрать зависимости, результаты сборки и крупные файлы. Ещё один отказ — если после фильтрации не осталось ни одного текстового файла с исходниками. После импорта картинки и шрифты придётся загрузить в проект заново. ## Что означают предупреждения на экране результата импорта Предупреждения не отменяют импорт: проект создан, открыть его можно сразу. Они говорят о том, где результат может разойтись с ожиданием. | Предупреждение | Что оно значит | | --- | --- | | Живое превью не поднимется: есть пакеты вне предустановленного набора | Превью запускается на заранее подготовленном наборе библиотек, а публикация ставит зависимости проекта по-настоящему. Опубликованный сайт соберётся, а вот превью до публикации может остаться пустым | | Живое превью может отличаться от публикации: в `vite.config` заданы алиасы или плагины | Превью использует совместимый конфиг платформы, а не ваш. На публикацию это не влияет | | Инструмент сборки не распознан — результат ожидается в `dist/` | Сборка запустится, но если она кладёт файлы в другой каталог, опубликованная страница будет пустой | | В `package.json` нет команды сборки — проект опубликуется как есть | Импортирована готовая статика, шага сборки не будет | | Архив больше лимитов импорта — часть файлов не приехала | Проект неполный, проверьте состав файлов до публикации | В импортированный проект добавляются служебные файлы платформы — `Dockerfile`, `nginx-default.conf`, `workai-template.json`. Если одноимённые файлы были в репозитории, они заменяются платформенными: по ним собирается публикация. ## Как отключить репозиторий и отозвать доступ Это два разных действия: - **«Отключить»** в шапке проекта разрывает связь проекта с репозиторием. Кнопка синхронизации пропадает, но приложение остаётся установленным в вашем GitHub-аккаунте, и другой проект можно привязать к репозиторию заново. - **Полный отзыв доступа** делается на стороне GitHub: в настройках аккаунта или организации, в разделе установленных приложений, удалите установку приложения WorkAI. После этого пропадает и доступ к репозиториям, и возможность выгружать в них проекты — при попытке синхронизации WorkAI покажет, что доступ не подтверждён. Ни отключение, ни отзыв доступа не удаляют уже созданные экспорт-ветки, коммиты и открытые pull request'ы — выгруженный код и PR остаются в репозитории. ## Если что-то не работает **Нужного репозитория нет в списке.** Проверьте, что при установке приложения вы дали доступ именно ему (в GitHub можно выбрать «только выбранные репозитории» и потом добавить ещё). В списке показываются только репозитории, где у вас есть право записи, и только те, что доступны лично вам, а не всей организации. **«Не удалось подключить GitHub».** Это общий текст для двух случаев. Первый и самый частый — в выбранной установке нет ни одного репозитория, где у вас есть право записи; в организации установку приложения может потребоваться подтвердить её владельцу. Второй — пока вы были на GitHub, проект перешёл к другому владельцу: подключать репозиторий может только текущий владелец проекта. **Возврат с GitHub привёл на список проектов, и ничего не произошло.** Так выглядит просроченная ссылка на подключение (прошло больше 10 минут) или возврат без нужных параметров — сообщения на этом экране не будет. Откройте проект и запустите подключение заново; если повторяется, попробуйте в окне без расширений, блокирующих переходы. **«Текущий доступ GitHub к этому репозиторию не подтверждён».** Права проверяются заново перед каждой операцией. Сообщение появляется, если доступ приложения к репозиторию сузили или отозвали на стороне GitHub, а также если репозиторий переименовали или перенесли. Подключите GitHub заново и выберите репозиторий ещё раз. **«Установка GitHub App принадлежит другому аккаунту».** Общий текст для сбоя обмена с GitHub при возврате. Чаще всего вы авторизовались в WorkAI под одним аккаунтом GitHub, а установку выбрали в другом: выйдите из лишнего аккаунта в браузере и повторите. Если аккаунт один, попробуйте ещё раз — GitHub мог не ответить на запрос списка репозиториев. **Синхронизация падает.** Проверьте, что доступ приложения к репозиторию не отозван на стороне GitHub и что ни один файл проекта не превышает 50 МБ. Текст последней ошибки виден в подсказке рядом с именем репозитория. **Импорт отклонён.** Сообщение всегда содержит причину — чаще всего это фреймворк со своим серверным процессом или слишком объёмный архив репозитория. См. разделы выше. ## Похожие темы - [Создатель](/docs/builder/overview) — как устроен режим, из которого выгружается проект. - [Быстрый старт](/docs/get-started/quickstart) — установка десктоп-клиента и первая правка кода. - [Модели и цены](/docs/models-and-pricing) — сколько стоит генерация и как считаются WorkCoins.