+++ title = "Sincronizzazione" date = 2026-11-05T00:00:00Z description = "Come HardenedPass sincronizza l'archivio con git: quando vengono registrate le modifiche, come fare pull e push, come uscire da un conflitto." weight = 70 draft = false +++ Ogni modifica che fai nell'app, come una nuova voce, una correzione o un'eliminazione, viene subito registrata con un commit git sul telefono. **Al server non arriva nulla finché non sincronizzi**, a meno che tu non attivi [Push dopo ogni modifica](#push-dopo-ogni-modifica). Fino ad allora, la modifica esiste solo su questo telefono. ## Sincronizza Trascina verso il basso l'elenco per sincronizzare. Puoi usare anche i tre puntini nella barra di ricerca: {{< image src="menu.png" alt="Il menu dell'elenco con Sincronizza repository, Pull dal remote, Push sul remote, Impostazioni e Informazioni." class="max-w-sm mx-auto rounded-lg border border-border" />}} - **Sincronizza repository** scarica le modifiche del server e invia le tue. - **Pull dal remote** scarica soltanto. - **Push sul remote** invia soltanto. Quasi sempre vuoi Sincronizza. Per disattivare il gesto, usa **Disattiva la sincronizzazione trascinando** nelle [Impostazioni]({{< relref "/hardenedpass/reference/settings" >}}). ## Push dopo ogni modifica Attiva **Push dopo ogni modifica** in **Impostazioni**, poi **Repository**, e ogni nuova voce, correzione, spostamento, rinomina o eliminazione fatta nell'app viene inviata subito. Così il server resta aggiornato, ed è meno probabile che una modifica fatta da un computer entri in conflitto con una rimasta sul telefono. Di base è spento. Tre cose da sapere: - Le voci salvate con la compilazione automatica non vengono inviate. Restano sul telefono fino al push o alla sincronizzazione successivi. - Invia soltanto. Per ricevere le modifiche del server devi comunque sincronizzare. - Se la chiave SSH è protetta dal blocco schermo, l'app la chiede a ogni modifica. Se il push non riesce, per esempio senza rete o quando il server ha modifiche più recenti, l'app mostra `Salvato sul dispositivo, ma push non riuscito. Sincronizza per riprovare`. La tua modifica è al sicuro in un commit locale: sincronizza appena puoi. ## Quando due dispositivi cambiano la stessa cosa Se modifichi la stessa voce sul telefono e su un computer prima di sincronizzare, git non può scegliere un vincitore. L'app usa di default un rebase (**Rebase al pull**), e la sincronizzazione si ferma con un errore che dice che il pull non è riuscito e che sei in detached HEAD. Il tuo lavoro non è perso. Apri **Impostazioni**, poi **Repository**, poi **Configurazione Git locale e utilità**. Hai due vie d'uscita: ### Tieni le tue modifiche **Interrompi il rebase ed esegui il push su un nuovo branch** annulla il rebase e invia il tuo lavoro locale su un nuovo branch del server. L'app te ne dice il nome. Poi, su un computer: ```bash pass git fetch origin pass git merge origin/NOME-DEL-BRANCH ``` Git si ferma sulle voci in conflitto. I file cifrati non si possono unire riga per riga, quindi tieni una versione di ciascuno, completa il merge e rimandalo con `pass git push`. Sul telefono, chiudi con l'hard reset qui sotto, così il telefono torna uguale al server. ### Butta via le tue modifiche **Hard reset al remote branch** chiede il nome del branch, poi rende il telefono una copia esatta di quel branch. {{< callout type="warning" >}} Un hard reset scarta i commit e le modifiche locali che non sono su quel remote branch. Usalo solo quando sei sicuro, o dopo aver messo al sicuro il tuo lavoro con l'opzione qui sopra. {{< /callout >}} ## Altri strumenti La stessa schermata imposta il nome e l'email usati per i commit, mostra la cronologia con **Mostra registro dei commit** e offre **Esegui la garbage collection** per fare ordine nel repository locale.