2012-07-16 17 views
7

Ho un repository git remoto con una grande cronologia e un canale di connessione lento. Dove sono alcuni utenti locali e il push/pull lento dopo i grandi commit o la clonazione da zero per i nuovi utenti sono grossi problemi, ora. Voglio creare il mirror locale di esso. Le modifiche locali devono essere confermate sul repository locale e sincronizzate con lo sfondo remoto. Capisco che questo problema è richiesto, ma non ho ancora trovato alcuna soluzione (non sono amministratore del repository remoto, cerco solo di semplificare il lavoro locale con esso).Specchio locale Git

+0

Questo post precedente è aiutarvi a raggiungere uno specchio di un pronti contro termine a distanza http://stackoverflow.com/questions/3959924/whats-the-difference-between-git-clone-mirror-and-git-clone-bare –

+1

Sono solo i tuoi utenti locali che si impegnano al lento repo remoto o ci sono altre persone che lavorano altrove? –

+0

@honk Sì. Gli utenti locali eseguono il 99% del lavoro, gli utenti remoti necessitano di un accesso di sola lettura (o con commit molto rari). Penso che la velocità della sincronizzazione in background locale remota sia appropriata per gli utenti remoti, penso che debbano avere un ritardo se la sincronizzazione non è ancora finita. – exbluesbreaker

risposta

3

Poiché si scrive nei commenti che le persone dietro la connessione lenta farebbero la maggior parte del lavoro, suggerirei di configurare il sito remoto lento come mirror del repository locale contro cui si impegnerebbe.

Prima fare una nuda clone di lento remoto su un server locale

$ git clone --bare git://slow/repo.git 

Si popolazione locale dovrebbe ora impegnarsi solo a quel clone, non il lento remota.

quindi impostare un job cron o qualcosa di simile per spingere i cambiamenti nel vostro repository locale al sito lento con

$ git push origin --mirror 

Utilizzando --mirror dici git di spingere tutti i rami e tag.

+0

Grazie! Lo collaudo per il mio test github repo e funziona. Il clone completo di repository remoti effettivi richiede 20 ore o più e io applico questa soluzione per questo nel prossimo futuro. – exbluesbreaker

+0

Ho trovato che questa soluzione interromperà tutte le modifiche apportate al repository remoto senza accesso tramite mirror locale. C'è un modo per unire le modifiche? Il commit al repo remoto è una cosa rara, ma non voglio perdere tali commit. Per esempio. la prima volta alcuni sviluppatori locali possono continuare a commettere repo remoti direttamente per errore. – exbluesbreaker

+0

@exbluesbreaker: è possibile rilasciare '--mirror', ma in tal caso è necessario specificare quale ramo si desidera inviare, ad es. 'git push origin master'. Quindi probabilmente vorrai anche aggiungere '--tags' alla push per spingere i tag. '--mirror' spingerà tutti i rami e tag locali, quindi fa tutto questo automaticamente (ma sovrascriverà le modifiche remote). –

1

Si dovrebbe essere in grado di fare cloni poco profonde con

git clone --depth=20 url-to-your-repo some-path 

Questo dovrebbe consentire di non perdere tempo con la maggior parte della storia.