SeaMeet Desktop is here — Record everything, miss nothing. Download free →

Configurarea sincronizării GitHub

Capitolul 38: Configurarea sincronizării GitHub

Sincronizarea GitHub transformă spațiul dumneavoastră de lucru SeaMeet într-un arbore Markdown privat, controlat prin versiune, care trăiește în propriul depozit GitHub. De fiecare dată când editați o notă, redenumiți o înregistrare sau ajustați o pagină wiki, SeaMeet face liniștit commit modificării în fundal și o împinge pe GitHub. Deschideți SeaMeet pe un alt laptop și notițele se descarcă la prima lansare — fără Dropbox în mijloc, fără server Seasalt în buclă. Repo-ul este al dumneavoastră, datele sunt ale dumneavoastră și puteți răsfoi direct pe github.com dacă vreți vreodată.

Modelul este simplu: depozitul dumneavoastră GitHub este stocarea. SeaMeet nu rulează un serviciu de sincronizare. Instalează o mică aplicație GitHub pe contul dumneavoastră, obține un token OAuth per utilizator și folosește acel token pentru a împinge și a descărca commit-uri Git direct. Deoarece stocarea este nivelul gratuit al GitHub — care vă oferă repo-uri private nelimitate — sincronizarea este efectiv gratuită. Și deoarece fiecare spațiu de lucru SeaMeet este propriul depozit, puteți păstra spațiile de lucru de muncă și personale complet separate.


Obiectivele capitolului

După citirea acestui capitol, veți putea:

  • Instalați aplicația SeaMeet GitHub pe contul sau organizația dumneavoastră
  • Autorizați SeaMeet prin OAuth și lăsați-l să creeze un depozit de sincronizare privat pentru dumneavoastră
  • Citiți bara de stare de sincronizare și înțelegeți fiecare stare din mașina de stări de sincronizare
  • Recunoașteți când OAuth s-a reîmprospătat automat în fundal și când trebuie să re-autorizați manual
  • Rezolvați un conflict de sincronizare când aceeași notă a fost editată pe două dispozitive
  • Reglați panoul Sync Settings (auto-sincronizare, interval de sincronizare, sincronizare la pornire)
  • Depanați cele mai comune moduri de eșec

Cerințe prealabile

Înainte de a începe, asigurați-vă că aveți:

  • Un cont GitHub — nivelul gratuit este în regulă; nu aveți nevoie de GitHub Pro
  • O îndreptățire activă de sincronizare — inclusă cu nivelurile BYOK Pro și Sync Pro. Dacă nivelul dumneavoastră de facturare nu include sincronizare, ecranul Sync Settings va afișa o pancartă "Subscribe to enable sync". Vezi Capitolul 35: Abonament și facturare pentru detalii despre plan.
  • Un spațiu de lucru deschis în SeaMeet — sincronizarea se atașează la spațiul de lucru activ, nu la aplicație în ansamblu. Dacă aveți mai multe spații de lucru, fiecare este propriul depozit GitHub.
  • Acces funcțional la internet — fluxul de configurare deschide GitHub în browserul dumneavoastră implicit

Un repo per spațiu de lucru. SeaMeet creează un depozit privat separat pentru fiecare spațiu de lucru pe care îl conectați. Acest lucru păstrează notele de muncă și notele personale curat izolate și înseamnă că puteți deconecta unul fără a atinge celălalt.


Configurare pas cu pas

Configurarea pentru prima dată durează aproximativ 90 de secunde: autorizați SeaMeet pe GitHub, lăsați-l să creeze repo-ul, așteptați încărcarea inițială și ați terminat.

Pasul 1: Deschideți Sync Settings

  1. Apăsați pictograma roată dințată Settings
  2. Deschideți fila Sync din șina stângă
  3. Veți vedea cardul antet "Sync with GitHub"

Dacă nu vedeți fila Sync, nivelul dumneavoastră de abonament nu include sincronizare — vezi Capitolul 35 pentru upgrade.

Dacă vedeți o pancartă care spune "Back up your notes to a private GitHub repo with BYOK Pro", aveți un cont gratuit. Apăsați pancarta pentru a deschide paywall-ul sau săriți peste restul acestui capitol până când vă abonați.

Pasul 2: Apăsați "Set Up GitHub Sync"

Starea goală a Sync Settings afișează trei mozaicuri de beneficii ("Gratuit și privat", "Efectiv nelimitat", "Un repo per spațiu de lucru") și un buton primar Set Up GitHub Sync în partea de jos.

Apăsați-l. Browserul dumneavoastră implicit se deschide pe o pagină de autorizare GitHub.

Pasul 3: Instalați aplicația SeaMeet GitHub (o singură dată)

Prima dată când autorizați SeaMeet, GitHub vă va cere să instalați aplicația SeaMeet GitHub pe contul dumneavoastră. Acesta este un pas unic per cont GitHub (sau per organizație, dacă doriți să sincronizați la un repo deținut de organizație).

Pe pagina de instalare GitHub:

  1. Alegeți contul sau organizația la care doriți ca SeaMeet să scrie
  2. Alegeți fie "All repositories", fie "Only select repositories" — aplicația SeaMeet are nevoie de permisiunile contents: write și administration: write pentru a putea crea repo-ul de sincronizare în numele dumneavoastră
  3. Apăsați Install & Authorize

GitHub vă revoltă înapoi la SeaMeet. Panoul Sync Settings afișează acum:

┌──────────────────────────────────────────────────────┐
│   ✓ Autorizat                                        │
│   ⟳ Creare depozit & încărcare...                    │
└──────────────────────────────────────────────────────┘

De ce o aplicație GitHub și nu un simplu token OAuth? Aplicațiile GitHub au permisiuni per-repo cu granularitate fină și token-uri de reîmprospătare rotative. SeaMeet are doar acces de scriere la repo-urile pe care le-ați ales explicit, iar token-ul de acces OAuth expiră la fiecare 8 ore — chiar dacă a fost scurs, fereastra ar fi mică. (Vezi secțiunea OAuth Auto-Refresh de mai jos pentru cum SeaMeet menține acest lucru invizibil pentru dumneavoastră.)

Pasul 4: Crearea depozitului (automat)

SeaMeet apelează acum API-ul GitHub în numele dumneavoastră și:

  1. Creează un repo privat numit după spațiul dumneavoastră de lucru (de ex. seameet-work-notes)
  2. Inițializează un repo Git local în interiorul folderului spațiului de lucru dacă nu există deja unul
  3. Rulează git init, scrie un .gitignore care exclude fișierele audio/video/captură de ecran și face un commit inițial
  4. Adaugă noul repo GitHub ca origin
  5. Împinge commit-ul inițial

Veți vedea bara de stare din partea de jos a barei laterale trecând prin:

Creare depozit...  →  Sincronizare...  →  Sincronizat · chiar acum

Asta este. Spațiul dumneavoastră de lucru este acum susținut de GitHub.

Pasul 5: Prima sincronizare rulează automat

De acum, SeaMeet face automat commit la fiecare 5 minute (implicit) ori de câte ori aveți modificări nesalvate și împinge pe GitHub imediat după fiecare commit. La următoarea lansare a SeaMeet, aplicația descarcă de pe GitHub înainte chiar să începeți să editați — astfel încât modificările făcute pe un alt dispozitiv apar în momentul în care aplicația se deschide.


Mașina de stări de sincronizare

SyncManager al SeaMeet rulează o mică mașină de stări și își transmite starea curentă renderer-ului. SyncStatusBar din bara laterală și panoul Sync Settings citesc ambele din această stare. Înțelegerea stărilor vă ajută să citiți UI-ul cu acuratețe.

                      ┌─────────────┐
                      │    idle     │ ◄──────┐
                      └──────┬──────┘        │
                             │ modif. fișier │
                             ▼               │
                      ┌─────────────┐        │
                ┌────►│   pending   │        │
                │     └──────┬──────┘        │
       modif.   │            │ cronom. commit│
       fișier   │            ▼               │
                │     ┌─────────────┐        │
                │     │ committing  │        │
                │     └──────┬──────┘        │
                │            ▼               │
                │     ┌─────────────┐        │
                │     │   pushing   │        │
                │     └──────┬──────┘        │
                │            ▼               │
                │     ┌─────────────┐        │
                │     │   synced    │── 5s ──┘
                │     └─────────────┘
                │
                │     ┌─────────────┐
                ├─────┤   pulling   │  (pornire sau push-respins)
                │     └─────────────┘
                │
                │     ┌─────────────┐
                ├─────┤  conflict   │  → utiliz. rezolvă → syncing → synced
                │     └─────────────┘
                │
                │     ┌─────────────┐
                ├─────┤   offline   │  → rețea înapoi → reîncercare
                │     └─────────────┘
                │
                │     ┌─────────────┐
                ├─────┤   timeout   │  → utiliz. apasă Reîncercare
                │     └─────────────┘
                │
                │     ┌────────────────┐
                └─────┤ token-expired  │ → card re-autorizare
                      └────────────────┘

Iată ce înseamnă fiecare stare în UI:

StareEtichetă bară stareCe înseamnă
idle"Sincronizat · acum 2 min"Nimic în așteptare, ultimul commit a fost curat
pending"În așteptare..."Aveți modificări nesalvate; cronometrul commit se va declanșa la următorul interval
committing"Sincronizare..."Un commit Git este în curs local
pushing"Împingere..."Commit local complet; împingere pe GitHub
pulling"Descărcare..."Fie sincronizarea la pornire, fie push-ul a fost respins și descărcăm mai întâi
syncing"Sincronizare..."Finalizarea unui rebase după rezolvarea conflictului
synced"Sincronizat · chiar acum"Succes tocmai finalizat; afișat 5 secunde, apoi revine la idle
conflict"Conflict sincronizare"Atât locale, cât și remote au editat același fișier. UI afișează fluxul de rezolvare a conflictelor.
error"Eroare sincronizare"Un eșec non-rețea, non-conflict (de ex. eșec git). Reîncearcă automat cu backoff exponențial până la 5 ori.
offline"Offline"Rețea inaccesibilă. Va reîncerca la următoarea modificare de fișier sau după 60 de secunde.
timeout"Sincronizare expirată"O comandă git a durat mai mult de 60 de secunde (vezi Sync Timeout Protection mai jos)
token-expired"Re-autorizați"Reîmprospătarea OAuth a eșuat și utilizatorul trebuie să re-autorizeze manual
installing-app"Instalare aplicație GitHub..."Așteptând ca utilizatorul să finalizeze pasul de instalare a aplicației GitHub în browserul lor
creating-repo"Creare depozit..."Fluxul de configurare creează repo-ul GitHub și împinge commit-ul inițial

Dacă bara de stare afișează un spinner, acea este activitate normală de fundal. Dacă este chihlimbar sau roșu, vezi secțiunea Depanare de mai jos.


OAuth Auto-Refresh

Aplicațiile GitHub emit token-uri de acces utilizator care expiră la fiecare 8 ore, plus un token de reîmprospătare care este valabil 6 luni. SeaMeet gestionează acest lucru pentru dumneavoastră, astfel încât aproape niciodată nu trebuie să vă gândiți la asta.

Cum funcționează:

  1. Când SeaMeet este pe punctul de a împinge sau a descărca, SyncManager._refreshTokenIfNeeded() verifică dacă token-ul curent expiră în următoarele 5 minute.
  2. Dacă da, SeaMeet apelează endpoint-ul /login/oauth/access_token al GitHub cu token-ul de reîmprospătare stocat. GitHub returnează un nou token de acces și rotește token-ul de reîmprospătare. SeaMeet scrie ambele înapoi în fișierul token criptat de pe disc.
  3. Comanda Git rulează apoi cu token-ul tocmai reîmprospătat. Nu vedeți nimic pe ecran — întreaga reîmprospătare durează mult sub o secundă.

Gestionarea eșecurilor tranzitorii: Dacă apelul de reîmprospătare eșuează deoarece rețeaua este fragilă sau GitHub a returnat un 5xx (un REFRESH_NETWORK_ERROR), SeaMeet nu aruncă token-ul existent. În schimb, sincronizarea intră în starea offline și încearcă din nou mai târziu. Acest lucru contează deoarece token-ul existent ar putea fi încă valabil pentru câteva minute suplimentare — aruncarea lui pe o întrerupere tranzitorie a rețelei v-ar deconecta inutil de la sincronizare.

Coalescerea reîmprospătărilor concurente: GitHub rotește token-ul de reîmprospătare de fiecare dată când îl folosiți, astfel încât două reîmprospătări concurente s-ar întrece și una ar invalida cealaltă. SeaMeet colapsează apelurile de reîmprospătare concurente într-un singur Promise în zbor (_refreshPromise), astfel încât sincronizarea la pornire și push-with-retry să nu se lupte niciodată pentru token-ul rotativ.

Când reîmprospătarea eșuează cu adevărat: Dacă GitHub returnează REFRESH_TOKEN_EXPIRED — adică token-ul de reîmprospătare de 6 luni a expirat sau a fost revocat — SeaMeet:

  1. Șterge fișierul token criptat de pe disc
  2. Intră în starea terminală token-expired
  3. Afișează un card chihlimbar în Sync Settings:
┌──────────────────────────────────────────────────────┐
│ ⚠  Autorizarea GitHub a expirat. Vă rugăm să         │
│    re-autorizați pentru a relua sincronizarea.       │
│                                                       │
│  [ ↻ Re-autorizați GitHub ]                          │
└──────────────────────────────────────────────────────┘

Apăsați Re-autorizați GitHub. Sunteți trimis înapoi prin fluxul OAuth — dar deoarece aplicația GitHub este deja instalată, este un singur clic pentru a confirma și ați terminat în aproximativ 10 secunde. SeaMeet apoi îndepărtează orice token stagnat din git config-ul dumneavoastră local (token-ul vechi ar putea fi încorporat în URL-ul origin) înainte de următoarea împingere, astfel încât să nu vă blocați pe o credență moartă.


Protecția împotriva timeout-ului de sincronizare

Comenzile Git pot atârna pentru totdeauna dacă o rețea devine tăcută la mijlocul transferului — un soclu TCP poate sta într-o stare jumătate-deschisă fără a ridica vreodată o eroare. SeaMeet învelește fiecare push și pull Git într-un timeout AbortController de 60 de secunde.

Dacă un push sau pull nu se finalizează în 60 de secunde, SeaMeet:

  1. Abandonează subprocesul git
  2. Intră în starea timeout
  3. Afișează un card chihlimbar în Sync Settings:
┌──────────────────────────────────────────────────────┐
│ ⚠  Sincronizarea a expirat. Acest lucru poate fi    │
│    cauzat de o problemă de rețea sau autorizare      │
│    GitHub expirată.                                   │
│                                                       │
│  [ ↻ Reîncercați sincronizarea ]   [ Re-autorizați GH]│
└──────────────────────────────────────────────────────┘

Reîncercați sincronizarea rulează commitNow din nou. Acesta este butonul potrivit de apăsat dacă credeți că rețeaua dumneavoastră tocmai s-a întrerupt scurt. Re-autorizați GitHub rulează din nou fluxul OAuth; apăsați acest lucru dacă timeout-ul continuă să se repete, ceea ce de obicei înseamnă că token-ul dumneavoastră este problema, nu rețeaua.

Starea revine automat la idle după aproximativ 30 de secunde chiar dacă nu apăsați nimic — sincronizarea va reîncerca la următoarea modificare de fișier.


Rezolvarea conflictelor

Un conflict se întâmplă când același fișier a fost editat pe două dispozitive de la ultima sincronizare. Exemplu: ați scris un paragraf în meetings/2026-06-03-standup.md pe laptopul dumneavoastră, apoi mai târziu ați editat același paragraf pe mașina unui prieten. Când al doilea dispozitiv împinge, GitHub respinge împingerea deoarece istoricile diverg.

SeaMeet gestionează acest lucru prin:

  1. Descărcarea modificărilor remote cu un rebase
  2. Detectarea marcajelor de conflict de fuziune
  3. Intrarea în starea conflict
  4. Afișarea conflictului în bara de stare a barei laterale (care devine apăsabilă) și în panoul de conflict Sync Settings

Modalul de rezolvare a conflictelor

Apăsarea barei de stare când sincronizarea este în conflict deschide Modalul de rezolvare a conflictelor:

┌──────────────────────────────────────────────────────────┐
│  ⚠  Conflict de sincronizare              1 / 2    [×]  │
├──────────────────────────────────────────────────────────┤
│                                                          │
│  "2026-06-03-standup.md" a fost modificat pe alt disp.   │
│                                                          │
│  ┌────────────────────────┐  ┌────────────────────────┐  │
│  │ ✎  Editare manuală      │  │ ✦  Fuziune agent       │  │
│  └────────────────────────┘  └────────────────────────┘  │
│                                                          │
└──────────────────────────────────────────────────────────┘

Aveți două opțiuni:

Editare manuală — deschide fișierul de conflict în editorul implicit al sistemului dumneavoastră cu marcajele standard ale Git <<<<<<< / ======= / >>>>>>> în loc. Editați fișierul pentru a le rezolva, salvați, apoi reveniți la SeaMeet și apăsați Done. SeaMeet pune în coadă fișierul rezolvat și continuă rebase-ul.

Fuziune agent (doar BYOK Pro, necesită AI Agent configurat) — trimite ambele versiuni către AI Agent-ul dumneavoastră configurat (GitHub Copilot sau Claude Code, vezi Capitolul 36: Ghid de configurare BYOK) și îi cere să producă o versiune fuzionată care păstrează intenția ambelor părți. Ieșirea agentului este pusă în coadă automat; veți vedea un spinner "Finalizare sincronizare..." în timp ce rebase-ul se finalizează.

Dacă există mai multe conflicte deodată, modalul afișează un contor (1 / 2, 2 / 2) și săgeți chevron în panoul de conflict Sync Settings, astfel încât să le puteți parcurge una câte una.

Opțiunile "Păstrează al meu" / "Păstrează al lor" / "Păstrează ambele" apar ca alegeri naturale când sunteți în interiorul editorului manual: lăsați doar textul versiunii dumneavoastră între marcaje, doar textul versiunii remote sau întrețeseți ambele. Butonul de fuziune Agent face efectiv "păstrează ambele, inteligent."

Ce se întâmplă dacă faceți o greșeală? Conflictele de sincronizare sunt nedistructive. Git păstrează conținutul original "al nostru" și "al lor" în index, iar getConflictVersions(filePath) poate recupera oricare în orice moment în timpul rezolvării. Nu veți pierde accidental munca.


Panoul Sync Settings

Odată ce sunteți conectat, Sync Settings (Settings → Sync) vă oferă un singur ecran cu totul într-un singur loc:

┌─────────────────────────────────────────────────────────────┐
│  ✓ Sincronizare & Backup                                    │
│  Notițele și wiki-ul dumneavoastră sunt sincronizate auto la│
│  GitHub. Înregistrările audio, video și capturile de ecran  │
│  nu sunt sincronizate.                                      │
├─────────────────────────────────────────────────────────────┤
│  ⓘ  https://github.com/you/seameet-work-notes                │
│  🕒 Ultima sincronizare: acum 4 minute                       │
├─────────────────────────────────────────────────────────────┤
│  Auto-sincronizare                                [ ON  ◉ ] │
│  Interval sincronizare                          [ 5 min ▾ ] │
│  Ramură                                              main    │
│  Ultima sincronizare                       acum 4 minute     │
├─────────────────────────────────────────────────────────────┤
│  Auto-sincronizare la modificări                  [ ON  ◉ ] │
│  Sincronizare la pornire                          [ ON  ◉ ] │
├─────────────────────────────────────────────────────────────┤
│  [ ⤓ Sincronizați acum ]                                    │
├─────────────────────────────────────────────────────────────┤
│  [ ↗ Vizualizați pe GitHub ]    [ Deconectați ]             │
└─────────────────────────────────────────────────────────────┘

Controalele, de sus în jos:

  • Auto-sincronizare — comutator principal pentru cronometrul de commit de fundal. Oprit înseamnă că SeaMeet face commit doar când apăsați Sincronizați acum.
  • Interval sincronizare — cât de des se declanșează cronometrul de commit. Alegerile sunt 1 / 5 / 10 / 30 minute. Implicit este 5 minute. Un interval de 1 minut este bun pentru luarea activă de notițe; 30 de minute este bun pentru spațiile de lucru cu editare redusă unde preferați să grupați commit-urile.
  • Ramură — ramura Git la care SeaMeet sincronizează. Aproape întotdeauna main. Doar pentru citire în UI.
  • Ultima sincronizare — marcaj de timp relativ al ultimei împingeri reușite.
  • Auto-sincronizare la modificări — când este pornit, împingerile se întâmplă imediat după fiecare commit local (cazul tipic). Când este oprit, SeaMeet face commit local, dar împinge doar când apăsați Sincronizați acum. Util dacă doriți să grupați împingerile (de ex., pe o conexiune măsurată).
  • Sincronizare la pornire — când este pornit, SeaMeet descarcă de pe GitHub în momentul în care aplicația se lansează. Recomandat decât dacă aveți o conexiune foarte lentă.
  • Sincronizați acum — forțați un ciclu imediat de commit-and-push. Nu așteaptă cronometrul. Util înainte de a închide laptopul.
  • Vizualizați pe GitHub — deschide repo-ul în browserul dumneavoastră.
  • Deconectați — șterge token-ul OAuth stocat, șterge fișierul token criptat și elimină origin din repo-ul Git local. Fișierele Markdown locale și istoricul Git sunt neatinse — doar legătura cu GitHub este tăiată.

Ce se sincronizează (și ce nu)

Acest lucru este documentat în indexul părții, dar merită repetat aici:

SincronizatNesincronizat
Notițe (fișiere .md)Înregistrări audio (.webm, .mp3)
Pagini wiki (fișiere .md)Înregistrări video (.webm, .mp4)
Manifeste de înregistrări (metadate JSON)Capturi de ecran (.png, .jpg)
Rezumate și transcrieri AIGenerări AI memorate
Graficul wikilinkSetările aplicației
.gitignoreStare scratch a editorului

.gitignore-ul pe care SeaMeet îl scrie exclude toate categoriile binare mari. Acest lucru este intenționat: repo-urile private gratuite GitHub se limitează la 1 GB, iar un video de 30 de minute l-ar consuma singur. SeaMeet păstrează media pe discul local și sincronizează doar Markdown-ul ușor.

Dacă doriți sincronizare media completă, acesta este nivelul Sync Pro — vezi Capitolul 35.


Depanare

"Autorizare eșuată" imediat după apăsarea Set Up GitHub Sync

Cauze și remedii:

  • Blocator de pop-up-uri — dacă nu s-a deschis nicio fereastră de browser, sistemul dumneavoastră de operare sau browserul ar putea fi blocat lansarea. Apăsați din nou Set Up GitHub Sync și confirmați orice sugestii de pop-up.
  • Ați refuzat permisiunile aplicației GitHub — întoarceți-vă prin flux și acceptați scopurile contents: write + administration: write. Fără administration: write, SeaMeet nu poate crea repo-ul pentru dumneavoastră.
  • Eroare de neconcordanță de stare — închideți orice alte ferestre SeaMeet care s-ar putea întrece pe același flux OAuth, apoi reîncercați.

Eroare "Permisiuni repo" în timpul configurării

Eroarea se citește ceva de genul "Aplicația GitHub are permisiunea 'contents: read', dar are nevoie de 'contents: write'." Acest lucru înseamnă că ați instalat o versiune mai veche a aplicației.

Reparare:

  1. Deschideți github.com/settings/installations
  2. Găsiți SeaMeet în listă și apăsați Configure
  3. Sub Repository permissions, schimbați Contents și Administration la Read and write
  4. Salvați, apoi dezinstalați și reinstalați aplicația — GitHub aplică noi permisiuni doar la reinstalare
  5. Re-rulați Set Up GitHub Sync în SeaMeet

"Nu am putut ajunge la GitHub" / sincronizarea blocată pe "Offline"

Eșec de rețea. SeaMeet va reîncerca automat când:

  • Faceți orice modificare de fișier (declanșează o încercare imediată de reîncercare)
  • Trec 60 de secunde de la ultima reîncercare

Dacă rețeaua dumneavoastră este înapoi și sincronizarea încă afișează Offline după câteva minute:

  1. Apăsați Sincronizați acum pentru a forța o reîncercare
  2. Dacă acel lucru expiră: verificați că firewall-ul dumneavoastră nu blochează github.com
  3. Ca ultimă soluție, reporniți SeaMeet — sincronizarea la pornire se va declanșa la lansare

Sincronizarea blocată pe "În așteptare"

Acest lucru înseamnă de obicei că cronometrul de auto-commit nu s-a declanșat încă. Implicit, se declanșează la fiecare 5 minute. Nu doriți să așteptați? Apăsați Sincronizați acum.

Dacă Sincronizați acum nu mută sincronizarea dincolo de În așteptare, verificați:

  • Sunteți pe un nivel de facturare care include sincronizare? Deschideți Sync Settings — dacă vedeți pancarta de abonare, sincronizarea este dezactivată la nivelul îndreptățirii.
  • Există modificări necommit-ate în afara arborelui Markdown? Cronometrul de auto-commit se declanșează doar când _pendingChanges nu este gol.

"Văd cardul token-expired"

Acesta este sfârșitul așteptat al ciclului de viață al reîmprospătării OAuth — token-ul dumneavoastră de reîmprospătare de 6 luni a expirat sau ați revocat aplicația GitHub sau ați schimbat parola GitHub (care invalidează toate token-urile OAuth).

Reparare: apăsați Re-autorizați GitHub în card. Fluxul este același ca configurarea inițială, dar sare pasul de instalare a aplicației GitHub (o aveți deja instalată). Durează aproximativ 10 secunde.

Panoul de rezolvare a conflictelor nu se închide

Panoul se închide doar când toate conflictele din listă sunt rezolvate. Dacă vedeți contorul (1 / 3), folosiți săgețile chevron din panoul de conflict Sync Settings pentru a parcurge fișierele rămase. Fiecare are nevoie de o rezolvare explicită (editare manuală + Done sau fuziune Agent).

Dacă panoul insistă că există conflicte, dar nu vedeți niciun marcaj în fișierele dumneavoastră, apăsați Sincronizați acum — o stare conflict stagnată va fi curățată la următoarea încercare de sincronizare reușită.

Bucle "Push respins"

Dacă sincronizarea alternează între pushing și pulling în mod repetat, GitHub respinge împingerile dumneavoastră deoarece remote-ul continuă să se miște înainte. Acest lucru se poate întâmpla dacă:

  • O altă instanță SeaMeet rulează față de același repo și împinge mai repede decât această poate prinde din urmă — închideți cealaltă instanță.
  • Cineva (sau un instrument) face commit la repo-ul GitHub din afara SeaMeet — întrerupeți instrumentul extern până când clona dumneavoastră locală prinde din urmă.

Note de securitate

Unde este stocat token-ul OAuth: în breloul OS-ului dumneavoastră prin API-ul safeStorage al Electron. Pe Windows, acesta este DPAPI, pe macOS este Keychain Services, pe Linux este libsecret. Blob-ul criptat este scris la <userData>/github-token.enc cu modul fișier 0o600. Fișierul deține token-ul de acces, token-ul de reîmprospătare, marcajul de timp al expirării și ID-ul clientului, secretul clientului și slug-ul aplicației GitHub.

Ce nu este stocat în argv: token-ul OAuth nu este niciodată transmis ca un argument -c http.extraHeader=... către git, deoarece argv este vizibil pentru alți utilizatori prin ps aux. În schimb, antetul Authorization este injectat prin variabila de mediu GIT_CONFIG_PARAMETERS, care este privată procesului. Alți utilizatori de pe aceeași mașină nu vă pot vedea token-ul.

Ce ajunge pe disc în repo: fișiere Markdown simple. Fără token-uri, fără secrete, fără credențiale. .gitignore exclude fișierele media, dar ar trebui să evitați totuși să lipiți secrete în corpurile notițelor — acelea se vor sincroniza.

Revocarea accesului: pentru a tăia imediat accesul SeaMeet la un repo, dezinstalați aplicația SeaMeet GitHub la github.com/settings/installations. Următoarea încercare de sincronizare va eșua cu token-expired, iar SeaMeet își va șterge token-ul local. Notițele dumneavoastră locale sunt neatinse.


Referință rapidă

┌─────────────────────────────────────────────────────────────┐
│                   SINCRONIZARE GITHUB                       │
│                   Referință rapidă                          │
├─────────────────────────────────────────────────────────────┤
│  Deschide Sync Sett.   │ Settings → Sync                    │
│  Configurare 1a oară   │ Apăsați "Set Up GitHub Sync"       │
│  Scopuri necesare      │ contents: write, admin: write      │
│  Denumirea repo        │ Un repo privat per spațiu de lucru │
├─────────────────────────────────────────────────────────────┤
│  Interval sincr. impl. │ 5 minute (1 / 5 / 10 / 30)         │
│  Forțați o sincr.      │ Butonul "Sincronizați acum"        │
│  Auto-sincr. la push   │ Pornit (comutator în Sync Settings)│
│  Sincr. la pornire     │ Pornit (comutator în Sync Settings)│
├─────────────────────────────────────────────────────────────┤
│  Marja reîmprospătare  │ 5 minute înainte de expirare       │
│  OAuth                 │                                    │
│  Timeout comandă Git   │ 60 secunde (AbortController)       │
│  Limită auto-reîncerc. │ 5 încercări, backoff exp.          │
│  Stocare token         │ Brelocul OS (safeStorage)          │
├─────────────────────────────────────────────────────────────┤
│  UI conflict           │ Apăsați bara de stare în conflict  │
│  Rezolvare manuală     │ Editare marcaje → Done             │
│  Fuziune agent         │ BYOK Pro + AI Agent configurat     │
├─────────────────────────────────────────────────────────────┤
│  Deconectare           │ Sync Settings → Deconectați        │
│  Revocare de pe GitHub │ github.com/settings/installations  │
│  Vizualizați repo      │ Link "Vizualizați pe GitHub"       │
└─────────────────────────────────────────────────────────────┘

Ultima actualizare: 2026-06-04

Capitolul 37: Furnizor GitHub Copilot | (sfârșitul manualului — întoarceți-vă la Index)

Published: