archivio git vs cp -R
-
22-08-2019 - |
Domanda
Se ho un clone di un repository git come copia cache su un server remoto per la distribuzione Capistrano / stile vlad, è meglio fare A)
git archive --format=tar origin/master | (cd #{destination} && tar xf -)
o B)
cp -R cached-copy #{destination} && rm -Rf #{destination}/.git
Per chiarire, il repository è già sul server remoto, e voglio solo copiare una particolare versione in una directory uscite sullo stesso server durante la distribuzione.
Soluzione
Direi che in realtà
rsync -avP /local/repo/* server:/remote/repo
Questo funziona finchè è OK per ignorare tutti i file dot nella repo, non solo .git
. Se si desidera saltare solo .git
allora avrete bisogno l'opzione -f
e la pagina man.
rsync . Funziona alla grande e il più delle volte è possibile utilizzarlo proprio come si usa scp!
Altri suggerimenti
A)
Si salva il sovraccarico della rete di trasferire la directory .git che potrebbe essere abbastanza grande a seconda di quanto la storia e non gli oggetti nella attuale capo.
Se avete mai desiderato di avere un repository git attuale sul lato remoto si sta meglio a spingere per una vera e propria repository e solo dover cambiare i delta.
Nessuno dei due!
Un modo migliore di farlo è quello di:
-
git fetch
la cache - Clona la cache al vostro directory corrente (con le opzioni
--no-checkout
abilitati) - Controlla il commit che si desidera.
Quando si esegue un clone locale Git utilizza collegamenti fisici. Ciò significa che, fino a quando si modifica un file, che è solito, si può avere 1.000 implementazioni e l'uso (quasi) solo lo spazio si avrebbe bisogno per uno. In questo modo è anche un sacco di archiviazione più veloce o rsync.
Inoltre qualcuno potrebbe aver già scritto il codice per voi.
di vigetlab capistrano_rsync_with_remote_cache
Io uso questo con Subversion e funziona bene per me.