SeaMeet Desktop здесь — Записывайте всё, не упускайте ничего. Скачать бесплатно →

Настройка GitHub Sync

Глава 38: Настройка GitHub Sync

GitHub Sync превращает ваше рабочее пространство SeaMeet в частное, контролируемое версиями Markdown-дерево, которое живёт в вашем собственном репозитории GitHub. Каждый раз, когда вы редактируете заметку, переименовываете запись или настраиваете страницу вики, SeaMeet тихо коммитит изменение в фоне и проталкивает его в GitHub. Откройте SeaMeet на другом ноутбуке, и ваши заметки автоматически загружаются при первом запуске — никакого Dropbox посередине, никакого сервера Seasalt в цикле. Репозиторий ваш, данные ваши, и вы можете просмотреть их напрямую на github.com, если когда-нибудь захотите.

Модель проста: ваш репозиторий GitHub — это хранилище. SeaMeet не запускает службу синхронизации. Он устанавливает маленькое приложение GitHub на вашу учётную запись, получает токен OAuth для пользователя и использует этот токен для проталкивания и извлечения Git-коммитов напрямую. Поскольку хранилище — это бесплатный уровень GitHub, который даёт вам неограниченные частные репозитории, синхронизация фактически бесплатна. И поскольку каждое рабочее пространство SeaMeet — это свой собственный репозиторий, вы можете держать рабочие и личные рабочие пространства полностью разделёнными.


Цели главы

После прочтения этой главы вы сможете:

  • Установить приложение SeaMeet GitHub на вашу учётную запись или организацию
  • Авторизовать SeaMeet через OAuth и позволить ему создать частный репозиторий синхронизации для вас
  • Читать строку статуса синхронизации и понимать каждое состояние в машине состояний синхронизации
  • Распознавать, когда OAuth автоматически обновился в фоне, и когда вам нужно повторно авторизоваться вручную
  • Разрешить конфликт синхронизации, когда одна и та же заметка была отредактирована на двух устройствах
  • Настроить панель настроек синхронизации (автосинхронизация, интервал синхронизации, синхронизация при запуске)
  • Устранить наиболее распространённые режимы сбоя

Предпосылки

Перед тем как начать, убедитесь, что у вас есть:

  • Учётная запись GitHub — бесплатный уровень подходит; вам не нужен GitHub Pro
  • Активное право на синхронизацию — включено в уровни BYOK Pro и Sync Pro. Если ваш уровень биллинга не включает синхронизацию, экран настроек синхронизации покажет баннер «Subscribe to enable sync». См. Глава 35: Подписка и оплата для деталей плана.
  • Рабочее пространство, открытое в SeaMeet — синхронизация прикрепляется к активному рабочему пространству, а не к приложению в целом. Если у вас несколько рабочих пространств, каждое из них — это свой собственный репозиторий GitHub.
  • Работающий доступ в интернет — поток настройки открывает GitHub в вашем браузере по умолчанию

Один репозиторий на рабочее пространство. SeaMeet создаёт отдельный частный репозиторий для каждого рабочего пространства, которое вы подключаете. Это сохраняет рабочие заметки и личные заметки чисто изолированными и означает, что вы можете отключить одно, не трогая другое.


Пошаговая настройка

Первоначальная настройка занимает около 90 секунд: авторизуйте SeaMeet на GitHub, позвольте ему создать ваш репозиторий, дождитесь начальной загрузки, и готово.

Шаг 1: Откройте настройки синхронизации

  1. Нажмите значок шестерёнки Настройки
  2. Откройте вкладку Sync в левой панели
  3. Вы увидите карточку заголовка "Sync with GitHub"

Если вы не видите вкладку Sync, ваш уровень подписки не включает синхронизацию — см. главу 35, чтобы обновить.

Если вы видите баннер с надписью «Back up your notes to a private GitHub repo with BYOK Pro», у вас бесплатная учётная запись. Нажмите баннер, чтобы открыть paywall, или пропустите остальную часть этой главы, пока не подпишетесь.

Шаг 2: Нажмите «Set Up GitHub Sync»

Пустое состояние настроек синхронизации показывает три плитки преимуществ («Бесплатно и приватно», «Фактически неограниченно», «Один репо на рабочее пространство») и основную кнопку Set Up GitHub Sync внизу.

Нажмите её. Ваш браузер по умолчанию открывается на страницу авторизации GitHub.

Шаг 3: Установите приложение SeaMeet GitHub (одноразово)

В первый раз, когда вы авторизуете SeaMeet, GitHub попросит вас установить приложение SeaMeet GitHub на вашу учётную запись. Это одноразовый шаг на учётную запись GitHub (или на организацию, если вы хотите синхронизироваться в репозиторий, принадлежащий организации).

На странице установки GitHub:

  1. Выберите учётную запись или организацию, на которую вы хотите, чтобы SeaMeet писал
  2. Выберите либо «Все репозитории», либо «Только выбранные репозитории» — приложению SeaMeet нужны разрешения contents: write и administration: write, чтобы оно могло создать репозиторий синхронизации от вашего имени
  3. Нажмите Install & Authorize

GitHub возвращает вас обратно в SeaMeet. Панель настроек синхронизации теперь показывает:

┌──────────────────────────────────────────────────────┐
│   ✓ Authorized                                       │
│   ⟳ Creating repository & uploading...               │
└──────────────────────────────────────────────────────┘

Почему приложение GitHub, а не обычный токен OAuth? Приложения GitHub имеют детализированные разрешения для каждого репозитория и вращающиеся токены обновления. SeaMeet всегда имеет доступ на запись только к репозиториям, которые вы явно выбрали, а токен доступа OAuth истекает каждые 8 часов — даже если бы он утёк, окно было бы маленьким. (См. раздел OAuth автообновление ниже, чтобы узнать, как SeaMeet делает это невидимым для вас.)

Шаг 4: Создание репозитория (автоматическое)

SeaMeet теперь вызывает API GitHub от вашего имени и:

  1. Создаёт частный репозиторий, названный по вашему рабочему пространству (например, seameet-work-notes)
  2. Инициализирует локальный Git-репозиторий внутри вашей папки рабочего пространства, если он ещё не существует
  3. Запускает git init, пишет .gitignore, который исключает файлы аудио/видео/снимков экрана, и делает начальный коммит
  4. Добавляет новый репозиторий GitHub как origin
  5. Проталкивает начальный коммит

Вы увидите, как строка статуса внизу боковой панели переходит через:

Creating repository...  →  Syncing...  →  Synced · just now

Вот и всё. Ваше рабочее пространство теперь поддерживается GitHub.

Шаг 5: Первая синхронизация запускается автоматически

С этого момента SeaMeet автоматически коммитит каждые 5 минут (по умолчанию), когда у вас есть несохранённые изменения, и проталкивает в GitHub немедленно после каждого коммита. При следующем запуске SeaMeet приложение извлекает из GitHub, прежде чем вы даже начнёте редактировать — поэтому изменения, сделанные на другом устройстве, появляются в момент открытия приложения.


Машина состояний синхронизации

SyncManager SeaMeet запускает маленькую машину состояний и транслирует своё текущее состояние рендереру. SyncStatusBar боковой панели и панель настроек синхронизации оба читают из этого состояния. Понимание состояний помогает вам точно читать UI.

                      ┌─────────────┐
                      │    idle     │ ◄──────┐
                      └──────┬──────┘        │
                             │ изм. файла    │
                             ▼               │
                      ┌─────────────┐        │
                ┌────►│   pending   │        │
                │     └──────┬──────┘        │
       изм.     │            │ таймер коммита│
       файла    │            ▼               │
                │     ┌─────────────┐        │
                │     │ committing  │        │
                │     └──────┬──────┘        │
                │            ▼               │
                │     ┌─────────────┐        │
                │     │   pushing   │        │
                │     └──────┬──────┘        │
                │            ▼               │
                │     ┌─────────────┐        │
                │     │   synced    │── 5с ──┘
                │     └─────────────┘
                │
                │     ┌─────────────┐
                ├─────┤   pulling   │  (старт или отклон. пуш)
                │     └─────────────┘
                │
                │     ┌─────────────┐
                ├─────┤  conflict   │  → польз. разрешает → синх → synced
                │     └─────────────┘
                │
                │     ┌─────────────┐
                ├─────┤   offline   │  → сеть вернулась → повтор
                │     └─────────────┘
                │
                │     ┌─────────────┐
                ├─────┤   timeout   │  → польз. жмёт Retry
                │     └─────────────┘
                │
                │     ┌────────────────┐
                └─────┤ token-expired  │ → карточка повт. авторизации
                      └────────────────┘

Вот что означает каждое состояние в UI:

СостояниеМетка строки статусаЧто это значит
idle"Synced · 2 min ago"Ничего не ожидает, последний коммит был чистым
pending"Pending..."У вас есть несохранённые изменения; таймер коммита сработает на следующем интервале
committing"Syncing..."Git-коммит идёт локально
pushing"Pushing..."Локальный коммит завершён; проталкивание в GitHub
pulling"Pulling..."Либо стартовая синхронизация, либо пуш отклонён, и мы сначала извлекаем
syncing"Syncing..."Завершение rebase после разрешения конфликта
synced"Synced · just now"Только что завершённый успех; показывается 5 секунд, затем возвращается в idle
conflict"Sync conflict"Локальная и удалённая обе отредактировали один файл. UI показывает поток разрешения конфликта.
error"Sync error"Несетевой, неконфликтный сбой (например, сбой git). Автоматически повторяется с экспоненциальной задержкой до 5 раз.
offline"Offline"Сеть недоступна. Повторит на следующем изменении файла или через 60 секунд.
timeout"Sync timed out"Команда git заняла дольше 60 секунд (см. защита тайм-аута синхронизации ниже)
token-expired"Re-authorize"Обновление OAuth не удалось, и пользователь должен повторно авторизоваться вручную
installing-app"Installing GitHub App..."Ждём, пока пользователь закончит шаг установки приложения GitHub в своём браузере
creating-repo"Creating repository..."Поток настройки создаёт репозиторий GitHub и проталкивает начальный коммит

Если строка статуса показывает спиннер, это нормальная фоновая активность. Если она янтарная или красная, см. раздел Устранение неполадок ниже.


OAuth автообновление

Приложения GitHub выдают токены доступа пользователей, которые истекают каждые 8 часов, плюс токен обновления, который действителен в течение 6 месяцев. SeaMeet управляет этим для вас, поэтому вам почти никогда не нужно думать об этом.

Как это работает:

  1. Когда SeaMeet собирается протолкнуть или извлечь, SyncManager._refreshTokenIfNeeded() проверяет, истекает ли текущий токен в течение следующих 5 минут.
  2. Если да, SeaMeet вызывает конечную точку GitHub /login/oauth/access_token с сохранённым токеном обновления. GitHub возвращает новый токен доступа и поворачивает токен обновления. SeaMeet записывает оба обратно в зашифрованный файл токена на диске.
  3. Команда Git затем запускается со свежеобновлённым токеном. Вы ничего не видите на экране — всё обновление занимает значительно меньше секунды.

Обработка временных сбоев: Если вызов обновления не удаётся, потому что сеть нестабильна или GitHub вернул 5xx (REFRESH_NETWORK_ERROR), SeaMeet не выбрасывает существующий токен. Вместо этого синхронизация переходит в состояние offline и пытается снова позже. Это важно, потому что существующий токен может всё ещё быть валидным ещё на несколько минут — выбрасывание его на временной сетевой сбой выгнало бы вас из синхронизации без необходимости.

Объединение одновременных обновлений: GitHub поворачивает токен обновления каждый раз, когда вы его используете, поэтому два одновременных обновления конкурировали бы, и одно сделало бы другое недействительным. SeaMeet объединяет одновременные вызовы обновления в один Promise в полёте (_refreshPromise), поэтому стартовая синхронизация и пуш-с-повтором никогда не борются за вращающийся токен.

Когда обновление действительно не удаётся: Если GitHub возвращает REFRESH_TOKEN_EXPIRED — означающее, что 6-месячный токен обновления истёк или был отозван — SeaMeet:

  1. Удаляет зашифрованный файл токена с диска
  2. Входит в терминальное состояние token-expired
  3. Показывает янтарную карточку в настройках синхронизации:
┌──────────────────────────────────────────────────────┐
│ ⚠  Авторизация GitHub истекла. Пожалуйста,            │
│    повторно авторизуйтесь, чтобы возобновить синхр.   │
│                                                       │
│  [ ↻ Re-authorize GitHub ]                            │
└──────────────────────────────────────────────────────┘

Нажмите Re-authorize GitHub. Вы будете отправлены обратно через поток OAuth — но поскольку приложение GitHub уже установлено, это один клик для подтверждения, и вы закончите примерно за 10 секунд. Затем SeaMeet удаляет любой устаревший токен из вашего локального git config (старый токен может быть встроен в URL origin), прежде чем следующий пуш, чтобы вы не зацикливались на мёртвых учётных данных.


Защита тайм-аута синхронизации

Команды Git могут зависнуть навсегда, если сеть замолкает посреди передачи — TCP-сокет может сидеть в полуоткрытом состоянии, никогда не вызывая ошибки. SeaMeet оборачивает каждый Git push и pull в 60-секундный тайм-аут AbortController.

Если push или pull не завершается за 60 секунд, SeaMeet:

  1. Прерывает подпроцесс git
  2. Входит в состояние timeout
  3. Показывает янтарную карточку в настройках синхронизации:
┌──────────────────────────────────────────────────────┐
│ ⚠  Синхронизация истекла. Это может быть вызвано     │
│    проблемой сети или истёкшей авторизацией GitHub.   │
│                                                       │
│  [ ↻ Retry Sync ]   [ Re-authorize GitHub ]           │
└──────────────────────────────────────────────────────┘

Retry Sync запускает commitNow снова. Это правильная кнопка для нажатия, если вы думаете, что ваша сеть кратко отключилась. Re-authorize GitHub запускает поток OAuth снова; нажмите это, если тайм-аут продолжает повторяться, что обычно означает, что проблема в вашем токене, а не в сети.

Статус автоматически возвращается в idle примерно через 30 секунд, даже если вы ничего не нажимаете — синхронизация повторится при следующем изменении файла.


Разрешение конфликтов

Конфликт случается, когда один и тот же файл был отредактирован на двух устройствах с момента последней синхронизации. Пример: вы написали параграф в meetings/2026-06-03-standup.md на вашем ноутбуке, затем позже отредактировали тот же параграф на машине друга. Когда второе устройство проталкивает, GitHub отклоняет push, потому что истории расходятся.

SeaMeet обрабатывает это, делая:

  1. Извлечение удалённых изменений с rebase
  2. Обнаружение маркеров конфликта слияния
  3. Вход в состояние conflict
  4. Показ конфликта в строке статуса боковой панели (которая становится кликабельной) и в панели конфликтов настроек синхронизации

Модальное окно разрешения конфликта

Нажатие на строку статуса, когда синхронизация в conflict, открывает модальное окно разрешения конфликта:

┌──────────────────────────────────────────────────────────┐
│  ⚠  Конфликт синхронизации          1 / 2          [×]  │
├──────────────────────────────────────────────────────────┤
│                                                          │
│  "2026-06-03-standup.md" был изменён на другом устройстве│
│                                                          │
│  ┌────────────────────────┐  ┌────────────────────────┐  │
│  │ ✎  Редактир. вручную   │  │ ✦  Объединение агентом │  │
│  └────────────────────────┘  └────────────────────────┘  │
│                                                          │
└──────────────────────────────────────────────────────────┘

У вас есть две опции:

Редактировать вручную — открывает файл конфликта в редакторе по умолчанию вашей системы со стандартными маркерами Git <<<<<<< / ======= / >>>>>>> на месте. Отредактируйте файл, чтобы их разрешить, сохраните, затем вернитесь в SeaMeet и нажмите Done. SeaMeet ставит разрешённый файл в стейдж и продолжает rebase.

Объединение агентом (только BYOK Pro, требует настроенного AI Agent) — отправляет обе версии вашему настроенному AI Agent (GitHub Copilot или Claude Code, см. Глава 36: Руководство по настройке BYOK) и просит его произвести объединённую версию, которая сохраняет намерения обеих сторон. Вывод агента автоматически стейджится; вы увидите спиннер «Finishing sync...», пока rebase завершается.

Если есть несколько конфликтов одновременно, модальное окно показывает счётчик (1 / 2, 2 / 2) и стрелки шевронов в панели конфликтов настроек синхронизации, чтобы вы могли проходить через них по одному.

Опции «Сохранить мою» / «Сохранить их» / «Сохранить обе» возникают как естественные выборы, когда вы внутри ручного редактора: оставьте только текст вашей версии между маркерами, только текст удалённой версии или переплетите оба. Кнопка Объединения агентом фактически делает «сохранить обе, разумно.»

Что если вы сделаете ошибку? Конфликты синхронизации неразрушающие. Git хранит исходное содержимое «наше» и «их» в индексе, а getConflictVersions(filePath) может получить любое в любой момент во время разрешения. Вы случайно не потеряете работу.


Панель настроек синхронизации

Как только вы подключены, настройки синхронизации (Настройки → Sync) дают вам один экран со всем в одном месте:

┌─────────────────────────────────────────────────────────────┐
│  ✓ Sync & Backup                                            │
│  Ваши заметки и вики автоматически синхр. в GitHub.         │
│  Аудиозаписи, видеозаписи и снимки экрана не синхр.         │
├─────────────────────────────────────────────────────────────┤
│  ⓘ  https://github.com/you/seameet-work-notes                │
│  🕒 Последняя синхр.: 4 минуты назад                         │
├─────────────────────────────────────────────────────────────┤
│  Автосинхронизация                               [ ON  ◉ ]  │
│  Интервал синхронизации                         [ 5 мин ▾ ] │
│  Ветка                                              main    │
│  Последняя синхр.                            4 минуты назад │
├─────────────────────────────────────────────────────────────┤
│  Автосинхр. при изменениях                       [ ON  ◉ ]  │
│  Синхр. при запуске                              [ ON  ◉ ]  │
├─────────────────────────────────────────────────────────────┤
│  [ ⤓ Sync Now ]                                             │
├─────────────────────────────────────────────────────────────┤
│  [ ↗ View on GitHub ]    [ Disconnect ]                     │
└─────────────────────────────────────────────────────────────┘

Элементы управления сверху вниз:

  • Auto-sync — главный переключатель таймера фонового коммита. Off означает, что SeaMeet коммитит только когда вы нажимаете Sync Now.
  • Sync interval — как часто срабатывает таймер коммита. Варианты: 1 / 5 / 10 / 30 минут. По умолчанию 5 минут. Интервал 1 минута подходит для активного ведения заметок; 30 минут — хорошо для рабочих пространств с малым редактированием, где вы предпочли бы пакетировать коммиты.
  • Branch — Git-ветка, в которую синхронизируется SeaMeet. Почти всегда main. Только для чтения в UI.
  • Last synced — относительная временная метка последнего успешного push.
  • Auto-sync on changes — когда вкл, пуши происходят сразу после каждого локального коммита (типичный случай). Когда выкл, SeaMeet коммитит локально, но проталкивает только когда вы нажимаете Sync Now. Полезно, если вы хотите пакетировать пуши (например, на тарифицируемом соединении).
  • Sync on startup — когда вкл, SeaMeet извлекает из GitHub в момент запуска приложения. Рекомендуется, если только у вас нет очень медленного соединения.
  • Sync Now — принудительно запустить цикл коммит-и-пуш. Не ждёт таймера. Полезно перед закрытием ноутбука.
  • View on GitHub — открывает репозиторий в вашем браузере.
  • Disconnect — очищает сохранённый токен OAuth, удаляет зашифрованный файл токена и удаляет origin из вашего локального Git-репозитория. Ваши локальные Markdown-файлы и история Git не трогаются — только связь с GitHub разрывается.

Что синхронизируется (и что нет)

Это задокументировано в индексе части, но стоит повторить здесь:

СинхронизируетсяНе синхронизируется
Заметки (файлы .md)Аудиозаписи (.webm, .mp3)
Страницы вики (файлы .md)Видеозаписи (.webm, .mp4)
Манифесты записей (метаданные JSON)Снимки экрана (.png, .jpg)
Сводки и транскрипты ИИКэшированные генерации ИИ
Граф викиссылокНастройки приложения
.gitignoreСостояние черновика редактора

.gitignore, который пишет SeaMeet, исключает все большие двоичные категории. Это намеренно: бесплатные частные репозитории GitHub ограничены 1 ГБ, а 30-минутное видео съело бы это само по себе. SeaMeet держит медиа на вашем локальном диске и синхронизирует только лёгкий Markdown.

Если вы хотите полную синхронизацию медиа, это уровень Sync Pro — см. главу 35.


Устранение неполадок

«Authorization failed» сразу после нажатия Set Up GitHub Sync

Причины и исправления:

  • Блокировщик всплывающих окон — если окно браузера не открылось, ваша ОС или браузер могли заблокировать запуск. Нажмите Set Up GitHub Sync снова и подтвердите любые подсказки всплывающих окон.
  • Вы отказали в разрешениях приложения GitHub — пройдите поток снова и примите области contents: write + administration: write. Без administration: write SeaMeet не может создать репозиторий для вас.
  • Ошибка несоответствия состояния — закройте любые другие окна SeaMeet, которые могут конкурировать на том же потоке OAuth, затем повторите попытку.

Ошибка «Repo permissions» во время настройки

Ошибка читается что-то вроде «GitHub App has 'contents: read' permission, but needs 'contents: write'.» Это означает, что вы установили более старую версию приложения.

Исправление:

  1. Откройте github.com/settings/installations
  2. Найдите SeaMeet в списке и нажмите Configure
  3. В разделе Repository permissions измените Contents и Administration на Read and write
  4. Сохраните, затем удалите и переустановите приложение — GitHub применяет новые разрешения только при переустановке
  5. Перезапустите Set Up GitHub Sync в SeaMeet

«Could not reach GitHub» / синхронизация застряла на «Offline»

Сетевой сбой. SeaMeet автоматически повторит, когда:

  • Вы сделаете любое изменение файла (запускает немедленную попытку повтора)
  • Пройдёт 60 секунд с последнего повтора

Если ваша сеть вернулась, а синхронизация всё ещё показывает Offline через пару минут:

  1. Нажмите Sync Now, чтобы принудительно повторить
  2. Если это истечёт: проверьте, что ваш брандмауэр не блокирует github.com
  3. В крайнем случае перезапустите SeaMeet — стартовая синхронизация сработает при запуске

Синхронизация застряла на «Pending»

Это обычно означает, что таймер автокоммита ещё не сработал. По умолчанию он срабатывает каждые 5 минут. Не хотите ждать? Нажмите Sync Now.

Если Sync Now не двигает синхронизацию мимо Pending, проверьте:

  • Вы на уровне биллинга, который включает синхронизацию? Откройте настройки синхронизации — если вы видите баннер подписки, синхронизация отключена на уровне права.
  • Есть ли незакоммиченные изменения вне дерева Markdown? Таймер автокоммита срабатывает только когда _pendingChanges непуст.

«Я вижу карточку token-expired»

Это ожидаемое окончание жизненного цикла обновления OAuth — ваш 6-месячный токен обновления истёк, или вы отозвали приложение GitHub, или вы изменили свой пароль GitHub (что делает недействительными все токены OAuth).

Исправление: нажмите Re-authorize GitHub в карточке. Поток такой же, как первоначальная настройка, но пропускает шаг установки приложения GitHub (он у вас уже установлен). Занимает около 10 секунд.

Панель разрешения конфликтов не закрывается

Панель закрывается только когда все конфликты в списке разрешены. Если вы видите счётчик (1 / 3), используйте стрелки шевронов в панели конфликтов настроек синхронизации, чтобы пройти оставшиеся файлы. Каждому нужно явное разрешение (ручное редактирование + Done или объединение агентом).

Если панель настаивает, что есть конфликты, но вы не видите маркеров в файлах, нажмите Sync Now — устаревшее состояние conflict будет очищено при следующей успешной попытке синхронизации.

Циклы «Push rejected»

Если синхронизация чередуется между pushing и pulling многократно, GitHub отклоняет ваши пуши, потому что удалённый постоянно движется вперёд. Это может произойти, если:

  • Другой экземпляр SeaMeet работает против того же репозитория и проталкивает быстрее, чем этот может догнать — закройте другой экземпляр.
  • Кто-то (или какой-то инструмент) коммитит в репозиторий GitHub извне SeaMeet — приостановите внешний инструмент, пока ваш локальный клон не догонит.

Замечания по безопасности

Где хранится токен OAuth: в брелке вашей ОС через API safeStorage Electron. На Windows это DPAPI, на macOS это Keychain Services, на Linux это libsecret. Зашифрованный блок записывается в <userData>/github-token.enc с режимом файла 0o600. Файл содержит токен доступа, токен обновления, временную метку истечения и ID клиента, секрет клиента и slug приложения GitHub.

Что не хранится в argv: токен OAuth никогда не передаётся как аргумент -c http.extraHeader=... в git, потому что argv видим другим пользователям через ps aux. Вместо этого заголовок Authorization внедряется через переменную окружения GIT_CONFIG_PARAMETERS, которая приватна для процесса. Другие пользователи на той же машине не могут увидеть ваш токен.

Что попадает на диск в репозитории: обычные файлы Markdown. Никаких токенов, никаких секретов, никаких учётных данных. .gitignore исключает медиафайлы, но вам всё равно следует избегать вставки секретов в тела заметок — те будут синхронизированы.

Отзыв доступа: чтобы немедленно отрезать доступ SeaMeet к репозиторию, удалите приложение SeaMeet GitHub на github.com/settings/installations. Следующая попытка синхронизации не удастся с token-expired, и SeaMeet очистит свой локальный токен. Ваши локальные заметки не тронуты.


Краткая справка

┌─────────────────────────────────────────────────────────────┐
│                   GITHUB SYNC                               │
│                   Краткая справка                           │
├─────────────────────────────────────────────────────────────┤
│  Открыть настройки синхр.│ Настройки → Sync                  │
│  Первонач. настройка     │ Нажмите "Set Up GitHub Sync"      │
│  Требуемые области       │ contents: write, admin: write    │
│  Именование репо         │ Один частный репо на раб. простр.│
├─────────────────────────────────────────────────────────────┤
│  Интерв. синхр. по умолч.│ 5 минут (1 / 5 / 10 / 30)        │
│  Принудит. синхр.        │ Кнопка "Sync Now"                 │
│  Автосинхр. при пуше     │ Вкл (переключ. в настр. синхр.)  │
│  Синхр. при запуске      │ Вкл (переключ. в настр. синхр.)  │
├─────────────────────────────────────────────────────────────┤
│  Запас обновления OAuth  │ 5 минут до истечения              │
│  Тайм-аут команды Git    │ 60 секунд (AbortController)       │
│  Лимит автоповтора       │ 5 попыток, эксп. задержка         │
│  Хранение токена         │ Брелок ОС (safeStorage)           │
├─────────────────────────────────────────────────────────────┤
│  UI конфликта            │ Нажмите строку статуса в конфликт.│
│  Ручное разрешение       │ Редактир. маркеры → Done          │
│  Объединение агентом     │ BYOK Pro + AI Agent настроен      │
├─────────────────────────────────────────────────────────────┤
│  Отключение              │ Настройки синхр. → Disconnect     │
│  Отзыв из GitHub         │ github.com/settings/installations │
│  Просмотр репо           │ Ссылка "View on GitHub"           │
└─────────────────────────────────────────────────────────────┘

Последнее обновление: 2026-06-04

Глава 37: Провайдер GitHub Copilot | (конец руководства — вернуться к Index)

Published: