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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top