Come aggiornare un clone git --mirror?


144

Ho creato un repository git per eseguire il mirroring di un sito live (che è un repository git non nudo):

git clone --mirror ssh://user@example.com/path/to/repo

Ora, per mantenere questo clone mirror aggiornato con tutte le modifiche dalla sua origine remota, quale comando o comandi devo usare?

Vorrei mantenere tutto aggiornato: commit, ref, hook, branch, ecc.

Grazie!

Risposte:


213

Questo è il comando che devi eseguire sul mirror:

git remote update

@Magnus Skog: Fantastico. Grazie! Questo è tutto? Ho bisogno di un altro comandante, come git fetch? O da git remote updatesolo farà tutto?
J. Bruni,

11
Vorrei sapere anche qual è la differenza con Git Fetch.
Thorbjørn Ravn Andersen,

1
@ Thorbjörn (avrai a che fare con un ö svedese :)): Git fetch aggiorna semplicemente il tuo repository con riferimenti remoti dal telecomando. Questo comando aggiorna tutto sul repository con mirroring.
ralphtheninja,

4
Ecco una buona risposta che spiega più: stackoverflow.com/questions/3959924/...
ralphtheninja

16
'git remote update --prune' farà tutto questo, ma rimuoverà i rami quando vengono rimossi dal repository originale.
teeks99,

8

Per quanto riguarda commit, ref, filiali e " et cetera ", la risposta di Magnus funziona semplicemente (git remote update ).

Ma sfortunatamente non c'è modo di clone/ rispecchiare / update i ganci , come volevo ...

Ho trovato questo thread molto interessante sulla clonazione / mirroring degli hook:

http://kerneltrap.org/mailarchive/git/2007/8/28/256180/thread

Ho studiato:

  • Gli hook non sono considerati parte del contenuto del repository.

  • Ci sono più dati, come la .git/descriptioncartella, che non viene clonata, proprio come gli hook.

  • Gli hook predefiniti che appaiono nella hooksdirectory provengono daTEMPLATE_DIR

  • C'è questa interessante templatefunzionalità su Git.

Quindi, posso ignorare questa "cosa del clone degli hook", o optare per una rsyncstrategia, dati gli scopi del mio mirror (backup + sorgente solo per altri cloni).

Beh ... mi dimenticherò solo della clonazione dei ganci e mi atterrò git remote update.

  • Ha appena sottolineato che non solo "hook" non sono gestiti dal processo clone/ update, ma anche stash, rerere, ecc ... Quindi, per un backup rigoroso,rsync o equivalente sarebbe davvero la strada da percorrere. Poiché questo non è davvero necessario nel mio caso (posso permettermi di non avere ganci, stash e così via), come ho detto, mi atterrò al remote update.

Grazie! Migliorato un po 'il mio "git-fu" ... :-)


5

Vedere qui: Git non clona tutti i rami sui cloni successivi?

Se lo vuoi davvero tirando i rami invece di push --mirror , puoi dare un'occhiata qui:

"fetch --all" in un repository git bare non sincronizza i rami locali con quelli remoti

Questa risposta fornisce passaggi dettagliati su come raggiungerlo in modo relativamente semplice:


1
pushnon è un'opzione per me perché devo farlo sul lato ricevente (da dove si trova il clone); pullinoltre non è un'opzione perché un repository mirror è un repository nudo (nessun albero di lavoro, quindi nessun "pull") - sembra che git remote updateeffettivamente faccia tutto (molto più facile della risposta di riferimento) ... Comunque, grazie! Certamente ci sono informazioni preziose nelle domande / risposte collegate.
J. Bruni,

1
ok, intendevo tirare come nel solito linguaggio. Tecnologia push and pull. Difficilmente c'è un'altra parola tranne il nonsensical "ottenere i dati da un telecomando attivamente sul client" che non duplicherebbe una parola che abbia significato per git o sistemi DVCS :) Il secondo collegamento fornirà i dettagli desiderati. Nota, che 'aggiornamento remoto git' non non infatti mantenere lo status 'specchio', senza le operazioni in più citati c'è
sehe

1
hmm ... scusa (HTH) - sembra che un mirror "assoluto" si ottenga più facilmente attraverso un semplice "rsync" della cartella repository originale ... non quello che volevo, ma ... ho appena fatto dei test ... e nulla sembra copiare i ganci - che mi interessano particolarmente ...
J. Bruni,

1
Cordiali saluti, gli scopi di questo mirror sono solo questi: 1) backup completo da dove posso ripristinare se i dati sul server repository originale vengono persi; 2) da qualche parte da dove altri possono clonare e ottenere un repository di lavoro locale, senza avere accesso al repository di origine originale
J. Bruni,

1
Se vuoi ganci e tutto il resto, la gitosi potrebbe (non ricordare bene) ciò di cui hai bisogno, ma rsyncin quel caso andrei con me . Inoltre, presumo che ti stia dimenticando degli stash (vedi qui ) e di avere di nuovo informazioni ...?
visto
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.