Ho appena iniziato a utilizzare git e sono impressionato dalle differenze del flusso di lavoro di SVN, ma ho incontrato una domanda strutturale/di installazione che la documentazione non sembra spiegare in modo intuitivo come impostare e io sono chiedendo se è anche possibile.Configurazione repository Git per lo sviluppo da due macchine?
La mia configurazione è che ho diversi computer da cui sviluppo (desktop e laptop), quindi, per mantenere più facilmente la sincronizzazione e fornire il backup per il repository git, ho impostato un repository "pubblico" in casa mia Server Linux su cui posso eseguire l'accesso da desktop e laptop. Non è veramente pubblico, dal momento che richiede l'accesso SSH alla scatola per arrivare.
Il mio problema arriva quando faccio modifiche sul mio desktop, posso spingere facilmente le modifiche al repository del server (ho il set mirror
bandierina per il origin
remoto su quel repository), e l'utilizzo di gitx
posso vedere che il locale e gli stati remoti sembrano identici e ciascuno dei miei singoli commit è stato registrato sul server.
La domanda è quando passo al mio laptop, che uso piuttosto raramente, il repository git ci sono probabilmente diversi commit dietro la versione del server e deve essere aggiornato. Ho iniziato a utilizzare git pull
per ottenere le modifiche locali, ma piuttosto che duplicare tutti i singoli commit sul server nel repository locale, aggiunge un nuovo commit 'unione' al repository locale e gitx
mostra l'unione nel ramo repository remoto in quello punto.
Esiste un comando/flusso di lavoro che consente di aggiornare il repository locale allo stato esatto del repository remoto (in modo tale che se eseguo uno git push --mirror
nessun dato andrebbe perso)? Dovrei cancellare il mio repository locale ogni volta e git clone
di nuovo ogni volta?
Attualmente nessun altro avrebbe bisogno di accedere a questo repository, anche se in futuro potrebbe diventare un deposito pubblico da cui attingere le persone, quindi le risposte che non distruggono tale possibilità sarebbero apprezzate.
Modifica: I miei commit includono rami di ribasso fuori dal ramo principale; potrebbe essere questo il trigger del comando git pull
da mostrare come unione? Il flag --rebase
è quello che mi serve allora?
Soluzione Spiegazione: Si scopre che avevo fatto la seguente per impostare i miei repository:
- utilizzare il laptop per inizializzare un repository git
- repository push computer portatile al server (impegnarsi A)
- ha fatto un cambiamento e impegnata sul computer portatile (laptop a commettere B)
- Desktop repository cloni del server (commit A)
- apportare modifiche al desktop e commettere (impegna C, D, E, incluse le filiali rebasing)
- Desktop spinge al server (server in rapido in avanti per E)
- Quando portatile tira dal server, i risultati in una stampa (dal B non possono digiunare in avanti per E).
- Il computer portatile si unisce e invia modifiche al server
- Anche il desktop deve unirsi.
A causa di quell'unico commit extra che è stato un errore newb non intenzionale, mi ha portato a pensare che sarebbe sempre stata un'unione. Su suggerimento di Xentac, sono tornato indietro e ho trovato sul computer portatile che avevo fatto un'unione che non è stata spinta al server, il che era il colpevole, e una volta ho ottenuto tutti e tre i sincronismi realmente sincronizzati, git pull --ff
(forzando solo le unioni veloci) funziona perfettamente e mi avvisa se qualcosa non è sincronizzato prima di eseguire l'unione.