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

Configurazione della sincronizzazione GitHub

Capitolo 38: Configurazione della sincronizzazione GitHub

La sincronizzazione GitHub trasforma il vostro workspace SeaMeet in un albero Markdown privato e con controllo di versione che vive nel vostro repository GitHub. Ogni volta che modificate una nota, rinominate una registrazione o regolate una pagina wiki, SeaMeet committa silenziosamente la modifica in background e la spinge a GitHub. Aprite SeaMeet su un altro laptop e le vostre note vengono recuperate al primo avvio — nessun Dropbox nel mezzo, nessun server Seasalt nel loop. Il repo è vostro, i dati sono vostri e potete sfogliarlo direttamente su github.com se mai voleste.

Il modello è semplice: il vostro repository GitHub è l'archiviazione. SeaMeet non esegue un servizio di sincronizzazione. Installa una piccola App GitHub sul vostro account, ottiene un token OAuth per utente e usa quel token per spingere e tirare commit Git direttamente. Poiché l'archiviazione è il livello gratuito di GitHub — che vi dà repo privati illimitati — la sincronizzazione è effettivamente gratuita. E poiché ogni workspace SeaMeet è il proprio repository, potete mantenere i workspace di lavoro e personali completamente separati.


Obiettivi del capitolo

Dopo aver letto questo capitolo, sarete in grado di:

  • Installare l'App GitHub di SeaMeet sul vostro account o organizzazione
  • Autorizzare SeaMeet tramite OAuth e lasciarlo creare un repository di sincronizzazione privato per voi
  • Leggere la barra di stato della sincronizzazione e comprendere ogni stato nella macchina a stati di sincronizzazione
  • Riconoscere quando OAuth si è aggiornato automaticamente in background e quando dovete ri-autorizzare manualmente
  • Risolvere un conflitto di sincronizzazione quando la stessa nota è stata modificata su due dispositivi
  • Regolare il pannello Impostazioni sincronizzazione (sincronizzazione automatica, intervallo di sincronizzazione, sincronizzazione all'avvio)
  • Risolvere i problemi delle modalità di fallimento più comuni

Prerequisiti

Prima di iniziare, assicuratevi di avere:

  • Un account GitHub — il livello gratuito va bene; non avete bisogno di GitHub Pro
  • Un diritto di sincronizzazione attivo — incluso con i livelli BYOK Pro e Sync Pro. Se il vostro livello di fatturazione non include la sincronizzazione, la schermata Impostazioni sincronizzazione mostrerà un banner "Abbonati per abilitare la sincronizzazione". Vedi Capitolo 35: Abbonamento e fatturazione per i dettagli del piano.
  • Un workspace aperto in SeaMeet — la sincronizzazione si attacca al workspace attivo, non all'app nel suo complesso. Se avete più workspace, ognuno è il proprio repository GitHub.
  • Accesso internet funzionante — il flusso di configurazione apre GitHub nel vostro browser predefinito

Un repo per workspace. SeaMeet crea un repository privato separato per ogni workspace che collegate. Questo mantiene le note di lavoro e personali puliti e isolati e significa che potete disconnetterne uno senza toccare l'altro.


Configurazione passo per passo

La configurazione iniziale richiede circa 90 secondi: autorizzate SeaMeet su GitHub, lasciate che crei il vostro repo, aspettate il caricamento iniziale e avete finito.

Passo 1: Aprire le Impostazioni sincronizzazione

  1. Cliccate l'icona dell'ingranaggio Impostazioni
  2. Aprite la scheda Sync nel pannello sinistro
  3. Vedrete la scheda di intestazione "Sincronizza con GitHub"

Se non vedete la scheda Sync, il vostro livello di abbonamento non include la sincronizzazione — vedi Capitolo 35 per fare l'upgrade.

Se vedete un banner che recita "Esegui il backup delle tue note in un repo GitHub privato con BYOK Pro", avete un account gratuito. Cliccate il banner per aprire il paywall, o saltate il resto di questo capitolo finché non vi abbonate.

Passo 2: Cliccare "Configura sincronizzazione GitHub"

Lo stato vuoto delle Impostazioni sincronizzazione mostra tre tile di vantaggio ("Gratuito e privato", "Effettivamente illimitato", "Un repo per workspace") e un pulsante primario Configura sincronizzazione GitHub in fondo.

Cliccatelo. Il vostro browser predefinito si apre alla pagina di autorizzazione GitHub.

Passo 3: Installare l'App GitHub di SeaMeet (una volta)

La prima volta che autorizzate SeaMeet, GitHub vi chiederà di installare l'App GitHub di SeaMeet sul vostro account. Questo è un passaggio unico per account GitHub (o per organizzazione, se volete sincronizzare a un repo di proprietà dell'organizzazione).

Sulla pagina di installazione di GitHub:

  1. Scegliete l'account o l'organizzazione a cui volete che SeaMeet scriva
  2. Scegliete o "Tutti i repository" o "Solo repository selezionati" — l'App SeaMeet ha bisogno dei permessi contents: write e administration: write per poter creare il repo di sincronizzazione per vostro conto
  3. Cliccate Installa e autorizza

GitHub vi rimanda a SeaMeet. Il pannello Impostazioni sincronizzazione ora mostra:

┌──────────────────────────────────────────────────────┐
│   ✓ Autorizzato                                      │
│   ⟳ Creazione repository e caricamento in corso...   │
└──────────────────────────────────────────────────────┘

Perché un'App GitHub e non un semplice token OAuth? Le App GitHub hanno permessi granulari per repo e token di aggiornamento rotanti. SeaMeet ha solo l'accesso in scrittura ai repo che avete scelto esplicitamente, e il token di accesso OAuth scade ogni 8 ore — anche se trapelasse, la finestra sarebbe piccola. (Vedi la sezione Aggiornamento automatico OAuth sotto per come SeaMeet lo mantiene invisibile a voi.)

Passo 4: Creazione del repository (automatica)

SeaMeet ora chiama l'API GitHub per vostro conto e:

  1. Crea un repo privato nominato dopo il vostro workspace (ad esempio seameet-work-notes)
  2. Inizializza un repo Git locale all'interno della cartella del vostro workspace se non ne esiste già uno
  3. Esegue git init, scrive un .gitignore che esclude file audio/video/schermate ed effettua un commit iniziale
  4. Aggiunge il nuovo repo GitHub come origin
  5. Spinge il commit iniziale

Vedrete la barra di stato in fondo alla barra laterale passare attraverso:

Creazione repository...  →  Sincronizzazione...  →  Sincronizzato · proprio ora

Ecco fatto. Il vostro workspace è ora supportato da GitHub.

Passo 5: La prima sincronizzazione viene eseguita automaticamente

Da ora in poi, SeaMeet auto-committa ogni 5 minuti (per impostazione predefinita) ogni volta che avete modifiche non salvate, e spinge a GitHub immediatamente dopo ogni commit. Al prossimo avvio di SeaMeet, l'app tira da GitHub prima ancora che iniziate a modificare — quindi le modifiche fatte su un altro dispositivo appaiono nel momento in cui l'app si apre.


La macchina a stati di sincronizzazione

Il SyncManager di SeaMeet esegue una piccola macchina a stati e trasmette il suo stato corrente al renderer. Il SyncStatusBar della barra laterale e il pannello Impostazioni sincronizzazione leggono entrambi da questo stato. Comprendere gli stati vi aiuta a leggere l'UI accuratamente.

                      ┌─────────────┐
                      │    idle     │ ◄──────┐
                      └──────┬──────┘        │
                             │ modifica file │
                             ▼               │
                      ┌─────────────┐        │
                ┌────►│   pending   │        │
                │     └──────┬──────┘        │
       modif.   │            │ timer commit  │
       file     │            ▼               │
                │     ┌─────────────┐        │
                │     │ committing  │        │
                │     └──────┬──────┘        │
                │            ▼               │
                │     ┌─────────────┐        │
                │     │   pushing   │        │
                │     └──────┬──────┘        │
                │            ▼               │
                │     ┌─────────────┐        │
                │     │   synced    │── 5s ──┘
                │     └─────────────┘
                │
                │     ┌─────────────┐
                ├─────┤   pulling   │  (avvio o push respinto)
                │     └─────────────┘
                │
                │     ┌─────────────┐
                ├─────┤  conflict   │  → utente risolve → sync → synced
                │     └─────────────┘
                │
                │     ┌─────────────┐
                ├─────┤   offline   │  → rete torna → riprova
                │     └─────────────┘
                │
                │     ┌─────────────┐
                ├─────┤   timeout   │  → utente clicca Riprova
                │     └─────────────┘
                │
                │     ┌────────────────┐
                └─────┤ token-expired  │ → scheda ri-autorizza
                      └────────────────┘

Ecco cosa significa ogni stato nell'UI:

StatoEtichetta barra di statoCosa significa
idle"Sincronizzato · 2 min fa"Nulla in sospeso, ultimo commit pulito
pending"In sospeso..."Avete modifiche non salvate; il timer di commit si attiverà al prossimo intervallo
committing"Sincronizzazione..."Un commit Git è in corso localmente
pushing"Push in corso..."Commit locale completo; push a GitHub
pulling"Pull in corso..."O sincronizzazione all'avvio, o il push è stato respinto e stiamo facendo pull prima
syncing"Sincronizzazione..."Finalizzazione di un rebase dopo la risoluzione del conflitto
synced"Sincronizzato · proprio ora"Successo appena completato; mostrato per 5 secondi, poi torna a idle
conflict"Conflitto di sincronizzazione"Sia locale che remoto hanno modificato lo stesso file. L'UI fa emergere il flusso di risoluzione del conflitto.
error"Errore di sincronizzazione"Un fallimento non di rete, non di conflitto (ad esempio fallimento di git). Riprova automaticamente con backoff esponenziale fino a 5 volte.
offline"Offline"Rete irraggiungibile. Riproverà alla prossima modifica del file o dopo 60 secondi.
timeout"Sincronizzazione scaduta"Un comando git ha impiegato più di 60 secondi (vedi Protezione timeout sincronizzazione sotto)
token-expired"Ri-autorizza"L'aggiornamento OAuth è fallito e l'utente deve ri-autorizzare manualmente
installing-app"Installazione App GitHub..."In attesa che l'utente finisca il passaggio di installazione dell'App GitHub nel suo browser
creating-repo"Creazione repository..."Il flusso di configurazione sta creando il repo GitHub e spingendo il commit iniziale

Se la barra di stato mostra uno spinner, è normale attività in background. Se è ambra o rossa, vedi la sezione Risoluzione dei problemi sotto.


Aggiornamento automatico OAuth

Le App GitHub emettono token di accesso utente che scadono ogni 8 ore, più un token di aggiornamento valido per 6 mesi. SeaMeet gestisce questo per voi così non dovete quasi mai pensarci.

Come funziona:

  1. Quando SeaMeet sta per fare push o pull, SyncManager._refreshTokenIfNeeded() controlla se il token corrente scade entro i prossimi 5 minuti.
  2. Se sì, SeaMeet chiama l'endpoint /login/oauth/access_token di GitHub con il token di aggiornamento memorizzato. GitHub restituisce un nuovo token di accesso e ruota il token di aggiornamento. SeaMeet scrive entrambi nel file di token crittografato su disco.
  3. Il comando Git viene quindi eseguito con il token appena aggiornato. Non vedete nulla sullo schermo — l'intero aggiornamento richiede ben meno di un secondo.

Gestione dei fallimenti transitori: Se la chiamata di aggiornamento fallisce perché la rete è instabile o GitHub ha restituito un 5xx (un REFRESH_NETWORK_ERROR), SeaMeet non scarta il token esistente. Invece la sincronizzazione va nello stato offline e riprova più tardi. Questo è importante perché il token esistente può ancora essere valido per diversi minuti — scartarlo su un blip di rete transitorio vi disconnetterebbe dalla sincronizzazione inutilmente.

Coalescenza di aggiornamenti concorrenti: GitHub ruota il token di aggiornamento ogni volta che lo usate, quindi due aggiornamenti concorrenti si correrebbero contro e uno invaliderebbe l'altro. SeaMeet collassa le chiamate di aggiornamento concorrenti in una singola Promise in volo (_refreshPromise) così la sincronizzazione all'avvio e push-with-retry non combattono mai sul token rotante.

Quando l'aggiornamento fallisce veramente: Se GitHub restituisce REFRESH_TOKEN_EXPIRED — significa che il token di aggiornamento di 6 mesi è scaduto o è stato revocato — SeaMeet:

  1. Elimina il file di token crittografato dal disco
  2. Entra nello stato terminale token-expired
  3. Mostra una scheda ambra in Impostazioni sincronizzazione:
┌──────────────────────────────────────────────────────┐
│ ⚠  L'autorizzazione GitHub è scaduta. Si prega di    │
│    ri-autorizzare per riprendere la sincronizzazione.│
│                                                      │
│  [ ↻ Ri-autorizza GitHub ]                           │
└──────────────────────────────────────────────────────┘

Cliccate Ri-autorizza GitHub. Venite rimandati attraverso il flusso OAuth — ma poiché l'App GitHub è già installata, è un singolo clic per confermare e avete finito in circa 10 secondi. SeaMeet quindi rimuove qualsiasi token stantio dal vostro git config locale (il vecchio token può essere incorporato nell'URL di origin) prima del prossimo push, così non andate in loop su una credenziale morta.


Protezione timeout di sincronizzazione

I comandi Git possono restare appesi per sempre se una rete tace a metà trasferimento — un socket TCP può sedere in uno stato semi-aperto senza mai sollevare un errore. SeaMeet avvolge ogni push e pull Git in un timeout AbortController di 60 secondi.

Se un push o pull non si completa in 60 secondi, SeaMeet:

  1. Aborta il sottoprocesso git
  2. Entra nello stato timeout
  3. Mostra una scheda ambra in Impostazioni sincronizzazione:
┌──────────────────────────────────────────────────────┐
│ ⚠  Sincronizzazione scaduta. Può essere causato da   │
│    un problema di rete o autorizzazione GitHub       │
│    scaduta.                                          │
│                                                      │
│  [ ↻ Riprova sincr. ]   [ Ri-autorizza GitHub ]      │
└──────────────────────────────────────────────────────┘

Riprova sincronizzazione esegue di nuovo commitNow. Questo è il pulsante giusto da cliccare se pensate che la vostra rete sia caduta brevemente. Ri-autorizza GitHub esegue di nuovo il flusso OAuth; cliccate questo se il timeout continua a ripetersi, il che di solito significa che il vostro token è il problema piuttosto che la rete.

Lo stato torna a idle automaticamente dopo circa 30 secondi anche se non cliccate nulla — la sincronizzazione riproverà alla prossima modifica del file.


Risoluzione dei conflitti

Un conflitto si verifica quando lo stesso file è stato modificato su due dispositivi dall'ultima sincronizzazione. Esempio: avete scritto un paragrafo in meetings/2026-06-03-standup.md sul vostro laptop, poi più tardi avete modificato lo stesso paragrafo sulla macchina di un amico. Quando il secondo dispositivo fa push, GitHub rifiuta il push perché le cronologie divergono.

SeaMeet gestisce questo:

  1. Tirando le modifiche remote con un rebase
  2. Rilevando i marcatori di conflitto di merge
  3. Entrando nello stato conflict
  4. Facendo emergere il conflitto nella barra di stato della barra laterale (che diventa cliccabile) e nel pannello dei conflitti delle Impostazioni sincronizzazione

Il modale di risoluzione conflitti

Cliccare la barra di stato quando la sincronizzazione è in conflict apre il Modale di risoluzione conflitti:

┌──────────────────────────────────────────────────────────┐
│  ⚠  Conflitto di sincronizzazione    1 / 2          [×]  │
├──────────────────────────────────────────────────────────┤
│                                                          │
│  "2026-06-03-standup.md" è stato modificato su un altro  │
│  dispositivo.                                            │
│                                                          │
│  ┌────────────────────────┐  ┌────────────────────────┐  │
│  │ ✎  Modifica manualm.   │  │ ✦  Unione agente       │  │
│  └────────────────────────┘  └────────────────────────┘  │
│                                                          │
└──────────────────────────────────────────────────────────┘

Avete due opzioni:

Modifica manualmente — apre il file in conflitto nell'editor predefinito del vostro sistema con i marcatori standard di Git <<<<<<< / ======= / >>>>>>> al loro posto. Modificate il file per risolverli, salvate, quindi tornate a SeaMeet e cliccate Fatto. SeaMeet mette in stage il file risolto e continua il rebase.

Unione agente (solo BYOK Pro, richiede Agente AI configurato) — invia entrambe le versioni al vostro Agente AI configurato (GitHub Copilot o Claude Code, vedi Capitolo 36: Guida alla configurazione BYOK) e gli chiede di produrre una versione unita che mantenga le intenzioni di entrambe le parti. L'output dell'agente viene messo in stage automaticamente; vedrete uno spinner "Completamento sincronizzazione..." mentre il rebase si completa.

Se ci sono più conflitti in una volta, il modale mostra un contatore (1 / 2, 2 / 2) e frecce chevron nel pannello dei conflitti delle Impostazioni sincronizzazione in modo da poterli percorrere uno alla volta.

Opzioni "Mantieni le mie" / "Mantieni le loro" / "Mantieni entrambe" vengono fuori come scelte naturali quando siete dentro l'editor manuale: lasciate solo il testo della vostra versione tra i marcatori, solo il testo della versione remota, o interlacciate entrambi. Il pulsante Unione agente fa effettivamente "mantieni entrambe, intelligentemente."

E se commetti un errore? I conflitti di sincronizzazione sono non distruttivi. Git mantiene il contenuto originale "nostro" e "loro" nell'indice, e getConflictVersions(filePath) può recuperare entrambi in qualsiasi punto durante la risoluzione. Non perderete accidentalmente il lavoro.


Il pannello Impostazioni sincronizzazione

Una volta che siete connessi, le Impostazioni sincronizzazione (Impostazioni → Sync) vi danno una singola schermata con tutto in un posto:

┌─────────────────────────────────────────────────────────────┐
│  ✓ Sincronizzazione e Backup                                │
│  Le tue note e wiki sono automaticamente sincronizzate con  │
│  GitHub. Le registrazioni audio, registrazioni video e      │
│  schermate non vengono sincronizzate.                       │
├─────────────────────────────────────────────────────────────┤
│  ⓘ  https://github.com/you/seameet-work-notes               │
│  🕒 Ultima sincronizzazione: 4 minuti fa                    │
├─────────────────────────────────────────────────────────────┤
│  Sincronizzazione automatica                     [ ON  ◉ ]  │
│  Intervallo di sincronizzazione                  [ 5 min ▾ ]│
│  Branch                                              main   │
│  Ultima sincronizz.                          4 minuti fa    │
├─────────────────────────────────────────────────────────────┤
│  Sincronizz. autom. su modifiche                 [ ON  ◉ ]  │
│  Sincronizzazione all'avvio                      [ ON  ◉ ]  │
├─────────────────────────────────────────────────────────────┤
│  [ ⤓ Sincronizza ora ]                                      │
├─────────────────────────────────────────────────────────────┤
│  [ ↗ Visualizza su GitHub ]    [ Disconnetti ]              │
└─────────────────────────────────────────────────────────────┘

I controlli, dall'alto in basso:

  • Sincronizzazione automatica — toggle master per il timer di commit in background. Off significa che SeaMeet commita solo quando cliccate Sincronizza ora.
  • Intervallo di sincronizzazione — quanto spesso si attiva il timer di commit. Le scelte sono 1 / 5 / 10 / 30 minuti. Predefinito è 5 minuti. Un intervallo di 1 minuto va bene per la presa di note attive; 30 minuti è buono per workspace con poche modifiche dove preferireste raggruppare i commit.
  • Branch — il branch Git a cui SeaMeet sincronizza. Quasi sempre main. Sola lettura nell'UI.
  • Ultima sincronizzazione — timestamp relativo dell'ultimo push riuscito.
  • Sincronizzazione automatica su modifiche — quando on, i push avvengono immediatamente dopo ogni commit locale (il caso tipico). Quando off, SeaMeet commita localmente ma fa push solo quando cliccate Sincronizza ora. Utile se volete raggruppare i push (ad esempio su una connessione a consumo).
  • Sincronizzazione all'avvio — quando on, SeaMeet tira da GitHub nel momento in cui l'app si avvia. Consigliato a meno che non abbiate una connessione molto lenta.
  • Sincronizza ora — forza un ciclo immediato di commit-and-push. Non aspetta il timer. Utile prima di chiudere il vostro laptop.
  • Visualizza su GitHub — apre il repo nel vostro browser.
  • Disconnetti — cancella il token OAuth memorizzato, elimina il file di token crittografato e rimuove origin dal vostro repo Git locale. I vostri file Markdown locali e la cronologia Git sono intatti — solo il collegamento a GitHub viene reciso.

Cosa viene sincronizzato (e cosa no)

Questo è documentato nell'indice della parte, ma vale la pena ripetere qui:

SincronizzatoNon sincronizzato
Note (file .md)Registrazioni audio (.webm, .mp3)
Pagine wiki (file .md)Registrazioni video (.webm, .mp4)
Manifesti delle registrazioni (JSON metadati)Schermate (.png, .jpg)
Riepiloghi AI e trascrizioniGenerazioni AI in cache
Grafo dei wikilinkImpostazioni dell'app
.gitignoreStato scratch dell'editor

Il .gitignore che SeaMeet scrive esclude tutte le categorie binarie grandi. Questo è intenzionale: i repo privati gratuiti di GitHub si fermano a 1 GB, e un video di 30 minuti se lo mangerebbe da solo. SeaMeet mantiene i media sul vostro disco locale e sincronizza solo il Markdown leggero.

Se volete la sincronizzazione completa dei media, quello è il livello Sync Pro — vedi Capitolo 35.


Risoluzione dei problemi

"Autorizzazione fallita" subito dopo aver cliccato Configura sincronizzazione GitHub

Cause e correzioni:

  • Blocco popup — se nessuna finestra del browser si è aperta, il vostro SO o browser potrebbe aver bloccato il lancio. Cliccate Configura sincronizzazione GitHub di nuovo e confermate eventuali prompt popup.
  • Avete negato i permessi dell'App GitHub — tornate indietro attraverso il flusso e accettate gli scope contents: write + administration: write. Senza administration: write SeaMeet non può creare il repo per voi.
  • Errore di mismatch di stato — chiudete altre finestre di SeaMeet che potrebbero correre sullo stesso flusso OAuth, quindi riprovate.

Errore "Permessi repo" durante la configurazione

L'errore recita qualcosa come "L'App GitHub ha il permesso 'contents: read', ma ha bisogno di 'contents: write'." Questo significa che avete installato una versione più vecchia dell'App.

Correzione:

  1. Aprite github.com/settings/installations
  2. Trovate SeaMeet nell'elenco e cliccate Configura
  3. Sotto Permessi del repository, cambiate Contents e Administration in Lettura e scrittura
  4. Salvate, quindi disinstallate e reinstallate l'app — GitHub applica i nuovi permessi solo alla reinstallazione
  5. Rieseguite Configura sincronizzazione GitHub in SeaMeet

"Impossibile raggiungere GitHub" / sincronizzazione bloccata su "Offline"

Fallimento di rete. SeaMeet riproverà automaticamente quando:

  • Fate qualsiasi modifica al file (attiva un tentativo di nuovo tentativo immediato)
  • Trascorrono 60 secondi dall'ultimo nuovo tentativo

Se la vostra rete è tornata e la sincronizzazione mostra ancora Offline dopo un paio di minuti:

  1. Cliccate Sincronizza ora per forzare un nuovo tentativo
  2. Se va in timeout: controllate che il vostro firewall non stia bloccando github.com
  3. Come ultima risorsa, riavviate SeaMeet — la sincronizzazione all'avvio si attiverà al lancio

Sincronizzazione bloccata su "In sospeso"

Questo di solito significa che il timer di auto-commit non si è ancora attivato. Per impostazione predefinita si attiva ogni 5 minuti. Non volete aspettare? Cliccate Sincronizza ora.

Se Sincronizza ora non sposta la sincronizzazione oltre In sospeso, controllate:

  • Siete su un livello di fatturazione che include la sincronizzazione? Aprite Impostazioni sincronizzazione — se vedete il banner di abbonamento, la sincronizzazione è disabilitata al livello del diritto.
  • Ci sono modifiche non committate fuori dall'albero Markdown? Il timer di auto-commit si attiva solo quando _pendingChanges non è vuoto.

"Vedo la scheda token-expired"

Questa è la fine prevista del ciclo di vita di aggiornamento OAuth — il vostro token di aggiornamento di 6 mesi è scaduto, o avete revocato l'App GitHub, o avete cambiato la vostra password GitHub (che invalida tutti i token OAuth).

Correzione: cliccate Ri-autorizza GitHub nella scheda. Il flusso è lo stesso della configurazione iniziale ma salta il passaggio di installazione dell'App GitHub (l'avete già installato). Richiede circa 10 secondi.

Il pannello di risoluzione dei conflitti non si chiude

Il pannello si chiude solo una volta che tutti i conflitti nell'elenco sono risolti. Se vedete il contatore (1 / 3), usate le frecce chevron nel pannello dei conflitti delle Impostazioni sincronizzazione per percorrere i file rimanenti. Ognuno ha bisogno di una risoluzione esplicita (modifica manuale + Fatto, o Unione agente).

Se il pannello insiste che ci sono conflitti ma non vedete marcatori nei vostri file, cliccate Sincronizza ora — uno stato conflict stantio verrà cancellato al prossimo tentativo di sincronizzazione riuscito.

Loop "Push respinti"

Se la sincronizzazione alterna ripetutamente tra pushing e pulling, GitHub sta rifiutando i vostri push perché il remoto continua a muoversi avanti. Questo può accadere se:

  • Un'altra istanza di SeaMeet è in esecuzione contro lo stesso repo e sta spingendo più velocemente di quanto questa possa recuperare — chiudete l'altra istanza.
  • Qualcuno (o qualche strumento) sta committando al repo GitHub da fuori SeaMeet — mettete in pausa lo strumento esterno finché il vostro clone locale non recupera.

Note di sicurezza

Dove il token OAuth è memorizzato: nel vostro keychain del SO tramite l'API safeStorage di Electron. Su Windows è DPAPI, su macOS è Keychain Services, su Linux è libsecret. Il blob crittografato viene scritto in <userData>/github-token.enc con modalità file 0o600. Il file contiene il token di accesso, il token di aggiornamento, il timestamp di scadenza e il client ID dell'App GitHub, il client secret e lo slug.

Cosa non è memorizzato in argv: il token OAuth non viene mai passato come argomento -c http.extraHeader=... a git, perché argv è visibile ad altri utenti tramite ps aux. Invece l'header Authorization viene iniettato attraverso la variabile d'ambiente GIT_CONFIG_PARAMETERS, che è privata al processo. Altri utenti sulla stessa macchina non possono vedere il vostro token.

Cosa finisce su disco nel repo: semplici file Markdown. Nessun token, nessun segreto, nessuna credenziale. Il .gitignore esclude i file media, ma dovreste comunque evitare di incollare segreti nei corpi delle note — quelli verranno sincronizzati.

Revocare l'accesso: per tagliare immediatamente l'accesso di SeaMeet a un repo, disinstallate l'App GitHub di SeaMeet su github.com/settings/installations. Il prossimo tentativo di sincronizzazione fallirà con token-expired e SeaMeet cancellerà il suo token locale. Le vostre note locali sono intatte.


Riferimento rapido

┌─────────────────────────────────────────────────────────────┐
│                   SINCRONIZZAZIONE GITHUB                   │
│                   Riferimento rapido                        │
├─────────────────────────────────────────────────────────────┤
│  Apri Impost. sinc.    │ Impostazioni → Sync                │
│  Configurazione inizio │ Cliccate "Configura sincr. GitHub" │
│  Scope richiesti       │ contents: write, admin: write      │
│  Denominazione repo    │ Un repo privato per workspace      │
├─────────────────────────────────────────────────────────────┤
│  Intervallo sinc. pre. │ 5 minuti (1 / 5 / 10 / 30)         │
│  Forza una sinc.       │ Pulsante "Sincronizza ora"         │
│  Sincr. auto su push   │ On (toggle in Imp. sinc.)          │
│  Sincr. all'avvio      │ On (toggle in Imp. sinc.)          │
├─────────────────────────────────────────────────────────────┤
│  Margine refresh OAuth │ 5 minuti prima scadenza            │
│  Timeout comando Git   │ 60 secondi (AbortController)       │
│  Limite auto-retry     │ 5 tentativi, backoff esp.          │
│  Memorizz. token       │ Keychain SO (safeStorage)          │
├─────────────────────────────────────────────────────────────┤
│  UI conflitti          │ Clic barra stato quando conflitto  │
│  Risoluz. manuale      │ Modifica marcatori → Fatto         │
│  Unione agente         │ BYOK Pro + Agente AI configurato   │
├─────────────────────────────────────────────────────────────┤
│  Disconnetti           │ Impost. sinc. → Disconnetti        │
│  Revoca da GitHub      │ github.com/settings/installations  │
│  Visualizza repo       │ Link "Visualizza su GitHub"        │
└─────────────────────────────────────────────────────────────┘

Ultimo aggiornamento: 2026-06-04

Capitolo 37: Provider GitHub Copilot | (fine del manuale — torna a Indice)

Published: