Pag-setup ng GitHub Sync
Kabanata 38: Pag-setup ng GitHub Sync
Binabago ng GitHub Sync ang iyong SeaMeet workspace sa isang private, version-controlled Markdown tree na nakatira sa iyong sariling GitHub repository. Sa bawat oras na mag-edit ka ng note, mag-retitle ng pagre-rekord, o mag-tweak ng wiki page, tahimik na nag-commit ang SeaMeet ng pagbabago sa background at itinutulak ito sa GitHub. Buksan ang SeaMeet sa ibang laptop at ang iyong mga note ay nakuha pababa sa unang pag-launch — walang Dropbox sa gitna, walang Seasalt server sa loop. Sa iyo ang repo, sa iyo ang data, at maaari mo itong i-browse nang direkta sa github.com kung gusto mo.
Simple ang modelo: ang iyong GitHub repository ay ang storage. Hindi nagpapatakbo ang SeaMeet ng sync service. Ini-install nito ang isang maliit na GitHub App sa iyong account, kumukuha ng per-user OAuth token, at gumagamit ng token na iyon upang itulak at hilahin ang mga Git commit nang direkta. Dahil ang storage ay ang libreng tier ng GitHub — na nagbibigay sa iyo ng walang limitasyong mga private repo — ang sync ay halos libre. At dahil ang bawat SeaMeet workspace ay sariling repository, maaari mong panatilihing ganap na hiwalay ang work at personal na workspace.
Mga Layunin ng Kabanata
Pagkatapos basahin ang kabanatang ito, magagawa mo:
- I-install ang SeaMeet GitHub App sa iyong account o organisasyon
- I-authorize ang SeaMeet sa pamamagitan ng OAuth at hayaan itong lumikha ng private sync repository para sa iyo
- Basahin ang sync status bar at unawain ang bawat estado sa sync state machine
- Kilalanin kung kailan awtomatikong nag-refresh ang OAuth sa background at kapag kailangan mong manu-manong i-authorize muli
- Lutasin ang sync conflict kapag ang parehong note ay nai-edit sa dalawang device
- I-tune ang Sync Settings panel (auto-sync, sync interval, sync sa pag-startup)
- I-troubleshoot ang pinaka-karaniwang mga failure mode
Mga Prerequisite
Bago ka magsimula, tiyaking mayroon ka:
- Isang GitHub account — okay ang libreng tier; hindi mo kailangan ang GitHub Pro
- Isang aktibong sync entitlement — kasama sa BYOK Pro at Sync Pro tier. Kung ang iyong billing tier ay hindi nagsasama ng sync, ipapakita ng Sync Settings screen ang "Mag-subscribe para paganahin ang sync" na banner. Tingnan ang Kabanata 35: Subscription at Pagsingil para sa mga detalye ng plano.
- Isang workspace na bukas sa SeaMeet — nakakabit ang sync sa aktibong workspace, hindi sa app sa kabuuan. Kung mayroon kang maraming workspace, ang bawat isa ay sariling GitHub repository.
- Gumaganang internet access — binubuksan ng setup flow ang GitHub sa iyong default na browser
Isang repo bawat workspace. Lumilikha ang SeaMeet ng hiwalay na private repository para sa bawat workspace na ikinokonekta mo. Pinapanatili nitong malinis na hiwalay ang mga work note at personal na note at nangangahulugang maaari mong i-disconnect ang isa nang hindi hinahawakan ang isa pa.
Sunud-Sunod na Pag-setup
Ang unang-pagkakataong setup ay tumatagal ng halos 90 segundo: i-authorize ang SeaMeet sa GitHub, hayaan itong lumikha ng iyong repo, maghintay para sa unang upload, at tapos ka na.
Hakbang 1: Buksan ang Sync Settings
- I-click ang Mga Setting gear icon
- Buksan ang Sync tab sa kaliwang rail
- Makikita mo ang "Sync sa GitHub" header card
Kung hindi mo nakikita ang Sync tab, ang iyong subscription tier ay hindi nagsasama ng sync — tingnan ang Kabanata 35 upang mag-upgrade.
Kung makakita ka ng banner na nagbabasa ng "I-back up ang iyong mga note sa isang private GitHub repo na may BYOK Pro", mayroon kang libreng account. I-click ang banner upang buksan ang paywall, o laktawan ang natitirang bahagi ng kabanatang ito hanggang sa naka-subscribe ka na.
Hakbang 2: I-click ang "I-set Up ang GitHub Sync"
Nagpapakita ang Sync Settings empty state ng tatlong benefit tile ("Libre at private", "Halos walang limitasyon", "Isang repo bawat workspace") at isang pangunahing I-set Up ang GitHub Sync button sa ibaba.
I-click ito. Bubukas ang iyong default na browser sa isang GitHub authorization page.
Hakbang 3: I-install ang SeaMeet GitHub App (isang beses)
Sa unang pagkakataon na i-authorize mo ang SeaMeet, hihilingin ng GitHub na i-install mo ang SeaMeet GitHub App sa iyong account. Ito ay isang one-time na hakbang bawat GitHub account (o bawat organisasyon, kung gusto mong mag-sync sa org-owned na repo).
Sa pahina ng pag-install ng GitHub:
- Piliin ang account o organisasyon na nais mong sulatin ng SeaMeet
- Pumili ng alinman sa "Lahat ng repository" o "Mga napiling repository lamang" — kailangan ng SeaMeet App ng
contents: writeatadministration: writena mga pahintulot upang makagawa ng sync repo sa iyong panig - I-click ang I-install at I-authorize
Nakabalik ang GitHub sa iyo sa SeaMeet. Ang Sync Settings panel ngayon ay nagpapakita ng:
┌──────────────────────────────────────────────────────┐
│ ✓ Naka-authorize │
│ ⟳ Lumilikha ng repository at nag-uupload... │
└──────────────────────────────────────────────────────┘
Bakit isang GitHub App at hindi isang plain OAuth token? Ang mga GitHub App ay may fine-grained per-repo permissions at rotating refresh tokens. Ang SeaMeet ay may write access lamang sa mga repo na tahasang pinili mo, at nag-e-expire ang OAuth access token bawat 8 oras — kahit na ito ay nag-leak, ang window ay maliit. (Tingnan ang seksyon ng OAuth Auto-Refresh sa ibaba para sa kung paano pinapanatili ng SeaMeet na hindi nakikita iyon sa iyo.)
Hakbang 4: Paglikha ng repository (awtomatiko)
Ngayon ay tumatawag ang SeaMeet sa GitHub API sa iyong panig at:
- Lumilikha ng private repo na pinangalanan sa iyong workspace (hal.
seameet-work-notes) - Sinisimulan ang lokal na Git repo sa loob ng iyong workspace folder kung wala pa
- Pinapatakbo ang
git init, sumusulat ng.gitignorena hindi kasama ang audio/video/screenshot file, at gumagawa ng paunang commit - Idinadagdag ang bagong GitHub repo bilang
origin - Itutulak ang paunang commit
Makikita mo ang status bar sa ibaba ng sidebar na lumilipat sa pamamagitan ng:
Lumilikha ng repository... → Nag-sysync... → Naka-sync · ngayon lang
Iyon na. Ang iyong workspace ngayon ay sinusuportahan ng GitHub.
Hakbang 5: Ang unang sync ay tumatakbo nang awtomatiko
Mula ngayon, awtomatikong nag-c-commit ang SeaMeet bawat 5 minuto (bilang default) sa tuwing mayroon kang mga hindi nai-save na pagbabago, at agad na itutulak sa GitHub pagkatapos ng bawat commit. Sa susunod na pag-launch ng SeaMeet, kumukuha ang app mula sa GitHub bago ka pa magsimulang mag-edit — kaya ang mga pagbabagong ginawa sa ibang device ay lumalabas sa sandaling magbukas ang app.
Ang Sync State Machine
Ang SyncManager ng SeaMeet ay nagpapatakbo ng isang maliit na state machine at nag-bro-broadcast ng kasalukuyang estado nito sa renderer. Parehong nagbabasa ang sidebar SyncStatusBar at ang Sync Settings panel mula sa estadong ito. Tumutulong ang pag-unawa sa mga estado na mabasa ng tama ang UI.
┌─────────────┐
│ idle │ ◄──────┐
└──────┬──────┘ │
│ pagbabago │
▼ │
┌─────────────┐ │
┌────►│ pending │ │
│ └──────┬──────┘ │
pagbabago│ │ commit timer │
│ ▼ │
│ ┌─────────────┐ │
│ │ committing │ │
│ └──────┬──────┘ │
│ ▼ │
│ ┌─────────────┐ │
│ │ pushing │ │
│ └──────┬──────┘ │
│ ▼ │
│ ┌─────────────┐ │
│ │ synced │── 5s ──┘
│ └─────────────┘
│
│ ┌─────────────┐
├─────┤ pulling │ (startup o push-rejected)
│ └─────────────┘
│
│ ┌─────────────┐
├─────┤ conflict │ → ng user resolve → syncing → synced
│ └─────────────┘
│
│ ┌─────────────┐
├─────┤ offline │ → network back → retry
│ └─────────────┘
│
│ ┌─────────────┐
├─────┤ timeout │ → user clicks Retry
│ └─────────────┘
│
│ ┌────────────────┐
└─────┤ token-expired │ → re-authorize card
└────────────────┘
Narito kung ano ang ibig sabihin ng bawat estado sa UI:
| Estado | Status bar label | Ano ang ibig sabihin |
|---|---|---|
| idle | "Naka-sync · 2 min ago" | Walang nakabinbin, malinis ang huling commit |
| pending | "Pending..." | May mga hindi nai-save na pagbabago; magpapaputok ang commit timer sa susunod na interval |
| committing | "Nag-sysync..." | Isang Git commit ang isinasagawa sa lokal |
| pushing | "Itinutulak..." | Tapos ang lokal na commit; itinutulak sa GitHub |
| pulling | "Kinukuha..." | Alinman sa startup sync, o tinanggihan ang push at kinukuha muna |
| syncing | "Nag-sysync..." | Tinatapos ang rebase pagkatapos ng paglutas ng conflict |
| synced | "Naka-sync · ngayon lang" | Bagong-kumpletong tagumpay; ipinapakita sa loob ng 5 segundo, pagkatapos ay bumabalik sa idle |
| conflict | "Sync conflict" | Pareho ang lokal at remote na nag-edit ng parehong file. Inilalantad ng UI ang conflict resolution flow. |
| error | "Sync error" | Isang non-network, non-conflict na pagkabigo (hal. git failure). Awtomatikong nag-re-retry na may exponential backoff hanggang 5 beses. |
| offline | "Offline" | Hindi maabot ang network. Magre-retry sa susunod na file change o pagkatapos ng 60 segundo. |
| timeout | "Nag-timeout ang sync" | Nagtagal ang git command nang higit sa 60 segundo (tingnan ang Sync Timeout Protection sa ibaba) |
| token-expired | "Muling i-authorize" | Nabigo ang OAuth refresh at ang user ay dapat muling i-authorize nang manu-mano |
| installing-app | "Nag-i-install ng GitHub App..." | Naghihintay para tapusin ng user ang GitHub App install step sa kanilang browser |
| creating-repo | "Lumilikha ng repository..." | Lumilikha ang setup flow ng GitHub repo at nag-iipon ng paunang commit |
Kung nagpapakita ang status bar ng spinner, ito ay normal na background activity. Kung amber o pula ito, tingnan ang seksyon ng Pag-troubleshoot sa ibaba.
OAuth Auto-Refresh
Ang mga GitHub App ay naglalabas ng user access tokens na nag-e-expire bawat 8 oras, kasama ang refresh token na valid sa loob ng 6 na buwan. Pinapamahalaan ito ng SeaMeet para sa iyo kaya halos hindi mo kailangang isipin ito.
Paano ito gumagana:
- Kapag ang SeaMeet ay malapit nang itulak o hilahin, sinusuri ng
SyncManager._refreshTokenIfNeeded()kung ang kasalukuyang token ay nag-e-expire sa loob ng susunod na 5 minuto. - Kung oo, tumatawag ang SeaMeet sa endpoint na
/login/oauth/access_tokenng GitHub gamit ang nakaimbak na refresh token. Nagbabalik ang GitHub ng bagong access token at i-rotate ang refresh token. Sumusulat ang SeaMeet ng pareho pabalik sa encrypted token file sa disk. - Ang Git command pagkatapos ay tumatakbo gamit ang bagong-refreshed na token. Wala kang makikita sa screen — ang buong refresh ay tumatagal nang mas mababa sa isang segundo.
Pamamahala ng transient failure: Kung nabigo ang refresh call dahil flaky ang network o nagbalik ang GitHub ng 5xx (isang REFRESH_NETWORK_ERROR), hindi itinatapon ng SeaMeet ang umiiral na token. Sa halip, ang sync ay napupunta sa offline na estado at sinubukan muli sa susunod. Ito ay mahalaga dahil ang umiiral na token ay maaaring valid pa rin sa loob ng ilang minuto — ang pag-tapon nito sa transient network blip ay maglo-log out sa iyo mula sa sync nang hindi kinakailangan.
Concurrent refresh coalescing: Nag-rorotate ang GitHub ng refresh token sa bawat oras na gagamitin mo ito, kaya magka-race ang dalawang concurrent refresh at iinvalidate ng isa ang isa. Tinipon ng SeaMeet ang mga concurrent refresh call sa isang in-flight Promise (_refreshPromise) kaya ang startup-sync at push-with-retry ay hindi kailanman nag-aaway sa rotating token.
Kapag tunay na nabigo ang refresh: Kung nagbalik ang GitHub ng REFRESH_TOKEN_EXPIRED — na nangangahulugang nag-expire o nawalan ng bisa ang 6 na buwang refresh token — ang SeaMeet ay:
- Tinatanggal ang encrypted token file mula sa disk
- Pumapasok sa
token-expiredna terminal state - Nagpapakita ng amber na card sa Sync Settings:
┌──────────────────────────────────────────────────────┐
│ ⚠ Nag-expire ang authorization ng GitHub. Mangyaring│
│ muling i-authorize upang ipagpatuloy ang sync. │
│ │
│ [ ↻ Muling I-authorize ang GitHub ] │
└─────────────────────────────────────────────────── ───┘
I-click ang Muling I-authorize ang GitHub. Ipinadadala ka pabalik sa OAuth flow — ngunit dahil naka-install na ang GitHub App, isang click lang ito upang kumpirmahin at tapos ka sa halos 10 segundo. Pagkatapos ay aalisin ng SeaMeet ang anumang stale na token mula sa iyong lokal na git config (ang lumang token ay maaaring naka-embed sa URL ng origin) bago ang susunod na push, kaya hindi ka nag-loop sa isang patay na credential.
Sync Timeout Protection
Maaaring mag-hang ang mga Git command nang walang katapusan kung tumahimik ang network sa kalagitnaan ng transfer — maaaring umupo ang TCP socket sa half-open state nang hindi kailanman nagtataas ng error. Binabalot ng SeaMeet ang bawat Git push at pull sa isang 60-segundong AbortController timeout.
Kung ang push o pull ay hindi kumpleto sa loob ng 60 segundo, ang SeaMeet ay:
- I-abort ang git subprocess
- Pumapasok sa
timeoutna estado - Nagpapakita ng amber card sa Sync Settings:
┌──────────────────────────────────────────────────────┐
│ ⚠ Nag-timeout ang sync. Maaaring ito ay sanhi ng │
│ network issue o nag-expire na GitHub authorization.│
│ │
│ [ ↻ I-retry ang Sync ] [ Muling I-authorize ng GitHub ]│
└──────────────────────────────────────────────────────┘
I-retry ang Sync ay nagpapatakbo ng commitNow muli. Ito ang tamang button na i-click kung sa tingin mo ay nawala lang nang maikli ang iyong network. Muling I-authorize ang GitHub ay nagpapatakbo ng OAuth flow muli; i-click ito kung patuloy na bumabalik ang timeout, na karaniwang nangangahulugan na ang token ang iyong problema sa halip na ang network.
Ang status ay bumabalik sa idle nang awtomatiko pagkatapos ng halos 30 segundo kahit na hindi mo i-click ang anuman — magre-retry ang sync sa susunod na pagbabago ng file.
Paglutas ng Conflict
Nangyayari ang conflict kapag ang parehong file ay nai-edit sa dalawang device mula sa huling sync. Halimbawa: nagsulat ka ng talata sa meetings/2026-06-03-standup.md sa iyong laptop, pagkatapos ay nag-edit ng parehong talata sa makina ng kaibigan. Kapag itinulak ng pangalawang device, tinatanggihan ng GitHub ang push dahil nag-iiba ang mga history.
Pinangangasiwaan ito ng SeaMeet sa pamamagitan ng:
- Pagkuha ng remote na mga pagbabago na may rebase
- Pagtuklas ng mga merge conflict marker
- Pumapasok sa
conflictna estado - Inilalantad ang conflict sa sidebar status bar (na nagiging clickable) at sa Sync Settings conflict panel
Ang Conflict Resolution Modal
Ang pag-click sa status bar kapag nasa conflict ang sync ay nagbubukas ng Conflict Resolution Modal:
┌──────────────────────────────────────────────────────────┐
│ ⚠ Sync Conflict 1 / 2 [×] │
├──────────────────────────────────────────────────────────┤
│ │
│ "2026-06-03-standup.md" ay binago sa ibang device. │
│ │
│ ┌────────────────────────┐ ┌────────────────────────┐ │
│ │ ✎ I-edit nang manu-mano│ │ ✦ Agent merge │ │
│ └────────────────────────┘ └────────────────────────┘ │
│ │
└──────────────────────────────────────────────────────────┘
May dalawang opsyon ka:
I-edit nang manu-mano — binubuksan ang conflict file sa default na editor ng iyong sistema na may standard na <<<<<<< / ======= / >>>>>>> na mga marker ng Git sa lugar. I-edit ang file upang lutasin ang mga ito, i-save, pagkatapos ay bumalik sa SeaMeet at i-click ang Tapos na. Sini-stage ng SeaMeet ang nalutas na file at ipinagpapatuloy ang rebase.
Agent merge (BYOK Pro lamang, nangangailangan ng AI Agent na naka-configure) — nagpapadala ng parehong bersyon sa iyong na-configure na AI Agent (GitHub Copilot o Claude Code, tingnan ang Kabanata 36: Gabay sa Pag-setup ng BYOK) at hinihiling itong gumawa ng pinagsamang bersyon na pinapanatili ang intent ng parehong panig. Ang output ng agent ay awtomatikong nai-stage; makikita mo ang isang "Tinatapos ang sync..." spinner habang kumpleto ang rebase.
Kung may maraming conflict nang sabay-sabay, ang modal ay nagpapakita ng counter (1 / 2, 2 / 2) at mga chevron arrow sa Sync Settings conflict panel kaya maaari kang lumakad sa kanila nang isa-isa.
Ang mga opsyon na "Panatilihin ang akin" / "Panatilihin ang sa kanila" / "Panatilihin ang pareho" ay lumalabas bilang mga natural na pagpipilian kapag nasa manual editor ka: iwanan lang ang text ng iyong bersyon sa pagitan ng mga marker, ang text lang ng remote na bersyon, o pagsamahin ang pareho. Ang Agent merge button ay epektibong "panatilihin ang pareho, matalino."
Ano kung magkamali ka? Ang mga sync conflict ay hindi nakakasira. Pinapanatili ng Git ang orihinal na "ours" at "theirs" na nilalaman sa index, at maaaring kunin ng
getConflictVersions(filePath)ang alinman sa anumang punto sa resolusyon. Hindi mo aksidenteng mawawala ang trabaho.
Ang Sync Settings Panel
Kapag nakakonekta ka na, binibigyan ka ng Sync Settings (Mga Setting → Sync) ng isang screen na may lahat sa isang lugar:
┌─────────────────────────────────────────────────────────────┐
│ ✓ Sync at Backup │
│ Ang iyong mga note at wiki ay awtomatikong naka-sync sa │
│ GitHub. Ang mga audio recording, video recording, at │
│ screenshot ay hindi naka-sync. │
├─────────────────────────────────────────────────────────────┤
│ ⓘ https://github.com/you/seameet-work-notes │
│ 🕒 Huling sync: 4 minuto ang nakalipas │
├─────────────────────────────────────────────────────────────┤
│ Auto-sync [ ON ◉ ] │
│ Sync interval [ 5 min ▾ ] │
│ Branch main │
│ Huling naka-sync 4 minuto ang nakalipas│
├─────────────────────────────────────────────────────────────┤
│ Auto-sync sa mga pagbabago [ ON ◉ ] │
│ Sync sa pag-startup [ ON ◉ ] │
├─────────────────────────────────────────────────────────────┤
│ [ ⤓ Sync Ngayon ] │
├─────────────────────────────────────────────────────────────┤
│ [ ↗ Tingnan sa GitHub ] [ I-disconnect ] │
└─────────────────────────────────────────────────────────────┘
Ang mga kontrol, mula sa itaas hanggang sa ibaba:
- Auto-sync — master toggle para sa background commit timer. Off ay nangangahulugang nag-c-commit lang ang SeaMeet kapag nag-click ka ng Sync Ngayon.
- Sync interval — kung gaano kadalas nagpaputok ang commit timer. Mga pagpipilian ay 1 / 5 / 10 / 30 minuto. Default ay 5 minuto. Ang 1 minutong interval ay maayos para sa aktibong note-taking; 30 minuto ay mabuti para sa mga low-edit workspace kung saan mas gusto mong mag-batch ng mga commit.
- Branch — ang Git branch na sini-sync ng SeaMeet. Halos palaging
main. Read-only sa UI. - Huling naka-sync — relative timestamp ng huling matagumpay na push.
- Auto-sync sa mga pagbabago — kapag naka-on, ang mga push ay nangyayari kaagad pagkatapos ng bawat lokal na commit (ang tipikal na kaso). Kapag naka-off, nag-c-commit ang SeaMeet nang lokal ngunit nag-pu-push lang kapag nag-click ka ng Sync Ngayon. Kapaki-pakinabang kung gusto mong mag-batch ng mga push (hal. sa metered connection).
- Sync sa pag-startup — kapag naka-on, kumukuha ang SeaMeet mula sa GitHub sa sandaling mag-launch ang app. Inirerekomenda maliban kung mayroon kang napakabagal na koneksyon.
- Sync Ngayon — pilitin ang agarang commit-and-push cycle. Hindi naghihintay sa timer. Kapaki-pakinabang bago isara ang iyong laptop.
- Tingnan sa GitHub — binubuksan ang repo sa iyong browser.
- I-disconnect — nililinis ang nakaimbak na OAuth token, tinatanggal ang encrypted token file, at inaalis ang
originmula sa iyong lokal na Git repo. Ang iyong mga lokal na Markdown file at Git history ay hindi nahawakan — tanging ang link sa GitHub ang naputol.
Ano ang Naka-sync (at Ano ang Hindi)
Ito ay nakadokumento sa part index, ngunit sulit ulitin dito:
| Naka-sync | Hindi naka-sync |
|---|---|
Mga note (.md na file) | Mga audio recording (.webm, .mp3) |
Mga wiki page (.md na file) | Mga video recording (.webm, .mp4) |
| Mga recording manifest (metadata JSON) | Mga screenshot (.png, .jpg) |
| Mga AI summary at transcript | Cached AI generations |
| Wikilink graph | Mga app setting |
.gitignore | Editor scratch state |
Ang .gitignore na isinusulat ng SeaMeet ay hindi kasama ang lahat ng malalaking binary category. Sinasadya ito: limitado ang GitHub's free private repos sa 1 GB, at ang 30 minutong video ay kakain niyon mag-isa. Pinapanatili ng SeaMeet ang media sa iyong lokal na disk at nag-syncs lamang ng magaan na Markdown.
Kung gusto mo ang buong media sync, iyon ang Sync Pro tier — tingnan ang Kabanata 35.
Pag-troubleshoot
"Nabigo ang authorization" pagkatapos mag-click sa I-set Up ang GitHub Sync
Mga sanhi at pag-aayos:
- Pop-up blocker — kung walang browser window na nabukas, maaaring na-block ng iyong OS o browser ang launch. I-click muli ang I-set Up ang GitHub Sync at kumpirmahin ang anumang mga pop-up prompt.
- Tinanggihan mo ang mga pahintulot ng GitHub App — bumalik sa flow at tanggapin ang
contents: write+administration: writena mga scope. Kung walangadministration: writehindi makakagawa ang SeaMeet ng repo para sa iyo. - State mismatch error — isara ang anumang ibang SeaMeet window na maaaring nag-rerace sa parehong OAuth flow, pagkatapos ay subukan muli.
"Repo permissions" na error sa panahon ng setup
Ang error ay nababasa nang katulad ng "Ang GitHub App ay may 'contents: read' na pahintulot, ngunit kailangan ng 'contents: write'." Nangangahulugan ito na nag-install ka ng mas lumang bersyon ng App.
Ayusin:
- Buksan ang github.com/settings/installations
- Hanapin ang SeaMeet sa listahan at i-click ang I-configure
- Sa ilalim ng Repository permissions, baguhin ang Contents at Administration sa Read and write
- I-save, pagkatapos ay i-uninstall at muling i-install ang app — inaaplay lang ng GitHub ang mga bagong pahintulot sa muling pag-install
- Muling patakbuhin ang I-set Up ang GitHub Sync sa SeaMeet
"Hindi maabot ang GitHub" / nakatigil sa "Offline" ang sync
Pagkabigo ng network. Awtomatikong magre-retry ang SeaMeet kapag:
- Gumawa ka ng anumang pagbabago ng file (nag-tri-trigger ng agarang retry attempt)
- 60 segundo ang lumipas mula sa huling retry
Kung bumalik na ang iyong network at nagpapakita pa rin ang sync ng Offline pagkatapos ng ilang minuto:
- I-click ang Sync Ngayon upang pilitin ang retry
- Kung nag-timeout iyon: suriin na ang iyong firewall ay hindi humaharang sa github.com
- Bilang huling resort, i-restart ang SeaMeet — magpaputok ang startup sync sa launch
Naka-stuck ang sync sa "Pending"
Karaniwang nangangahulugan ito na hindi pa naputok ang auto-commit timer. Bilang default, nagpaputok ito bawat 5 minuto. Ayaw mong maghintay? I-click ang Sync Ngayon.
Kung ang Sync Ngayon ay hindi naglilipat ng sync palampas sa Pending, suriin:
- Ikaw ba ay nasa billing tier na nagsasama ng sync? Buksan ang Sync Settings — kung makita mo ang subscribe banner, naka-disable ang sync sa layer ng entitlement.
- May mga uncommitted na pagbabago sa labas ng Markdown tree? Nag-pa-paputok lang ang auto-commit timer kapag ang
_pendingChangesay hindi walang laman.
"Nakikita ko ang token-expired card"
Ito ang inaasahang dulo ng OAuth refresh lifecycle — nag-expire ang iyong 6 na buwang refresh token, o binawi mo ang GitHub App, o binago mo ang iyong GitHub password (na nag-iinvalidate sa lahat ng OAuth token).
Ayusin: i-click ang Muling I-authorize ang GitHub sa card. Ang flow ay pareho sa unang setup ngunit nilalaktawan ang GitHub App install step (mayroon ka na nito naka-install). Tumatagal ng halos 10 segundo.
Hindi nagsasara ang panel ng conflict resolution
Nagsasara lang ang panel kapag nalutas na ang lahat ng conflict sa listahan. Kung makakakita ka ng counter (1 / 3), gamitin ang mga chevron arrow sa Sync Settings conflict panel upang lumakad sa natitirang mga file. Bawat isa ay nangangailangan ng tahasang resolusyon (manual edit + Tapos na, o Agent merge).
Kung ipinapahayag ng panel na may mga conflict ngunit hindi mo nakikita ang anumang mga marker sa iyong mga file, i-click ang Sync Ngayon — ang stale conflict na estado ay lilinawin sa susunod na matagumpay na sync attempt.
"Push rejected" na mga loop
Kung naghahalili ang sync sa pagitan ng pushing at pulling nang paulit-ulit, tinatanggihan ng GitHub ang iyong mga push dahil patuloy na sumusulong ang remote. Maaari itong mangyari kung:
- May ibang SeaMeet instance na tumatakbo laban sa parehong repo at nag-pu-push nang mas mabilis kaysa rito ay makakahabol — isara ang ibang instance.
- May (o ilang tool) na nag-c-commit sa GitHub repo mula sa labas ng SeaMeet — i-pause ang external tool hanggang sa makahabol ang iyong lokal na clone.
Mga Tala sa Seguridad
Kung saan nakaimbak ang OAuth token: sa iyong OS keychain sa pamamagitan ng Electron's safeStorage API. Sa Windows iyon ay DPAPI, sa macOS ay Keychain Services, sa Linux ay libsecret. Ang encrypted blob ay isinusulat sa <userData>/github-token.enc na may file mode 0o600. Ang file ay nagtataglay ng access token, refresh token, expiry timestamp, at client ID, client secret, at slug ng GitHub App.
Ano ang hindi naka-store sa argv: Ang OAuth token ay hindi kailanman ipinapasa bilang -c http.extraHeader=... argument sa git, dahil nakikita ng ibang user ang argv sa pamamagitan ng ps aux. Sa halip, ang Authorization header ay ini-inject sa pamamagitan ng GIT_CONFIG_PARAMETERS environment variable, na private sa proseso. Hindi makikita ng ibang user sa parehong makina ang iyong token.
Ano ang napupunta sa disk sa repo: simpleng Markdown na mga file. Walang token, walang sikreto, walang credential. Ang .gitignore ay hindi kasama ang mga media file, ngunit dapat mo pa ring iwasan ang pag-paste ng mga sikreto sa mga note body — i-sysync ang mga iyon.
Pag-revoke ng access: upang agad na putulin ang access ng SeaMeet sa isang repo, i-uninstall ang SeaMeet GitHub App sa github.com/settings/installations. Ang susunod na sync attempt ay mabibigo sa token-expired at lilinisin ng SeaMeet ang lokal na token nito. Hindi nahahawakan ang iyong mga lokal na note.
Mabilisang Sanggunian
┌─────────────────────────────────────────────────────────────┐
│ GITHUB SYNC │
│ Mabilisang Sanggunian │
├─────────────────────────────────────────────────────────────┤
│ Buksan ang Sync Settings│ Mga Setting → Sync │
│ Unang-pagkakataong setup│ I-click ang "I-set Up ang GitHub │
│ │ Sync" │
│ Mga kinakailangang scope│ contents: write, admin: write │
│ Pagpapangalan ng repo │ Isang private repo bawat workspace│
├─────────────────────────────────────────────────────────────┤
│ Default na sync interval│ 5 minuto (1 / 5 / 10 / 30) │
│ Pilitin ang sync │ "Sync Ngayon" na button │
│ Auto-sync sa push │ On (toggle sa Sync Settings) │
│ Sync sa pag-startup │ On (toggle sa Sync Settings) │
├─────────────────────────────────────────────────────────────┤
│ OAuth refresh margin │ 5 minuto bago mag-expire │
│ Git command timeout │ 60 segundo (AbortController) │
│ Limit ng auto-retry │ 5 na attempt, exp. backoff │
│ Pag-iimbak ng token │ OS keychain (safeStorage) │
├─────────────────────────────────────────────────────────────┤
│ Conflict UI │ I-click ang status bar kapag in conflict│
│ Manual resolve │ I-edit ang mga marker → Tapos na │
│ Agent merge │ BYOK Pro + AI Agent na naka-configure│
├─────────────────────────────────────────────────────────────┤
│ I-disconnect │ Sync Settings → I-disconnect │
│ I-revoke mula sa GitHub │ github.com/settings/installations│
│ Tingnan ang repo │ "Tingnan sa GitHub" link │
└─────────────────────────────────────────────────────────────┘
Huling na-update: 2026-06-04
← Kabanata 37: GitHub Copilot Provider | (katapusan ng manwal — bumalik sa Index)
Published: