2012-09-10 6 views
8

Questo problema non è lo stesso di git - how to mirror file from other repo o How do I update my bare repo?Come modificare un repository git clonato con --bare per corrispondere a uno clonato con --mirror?

Dal momento che un repository clonato con --mirror è un repository nudo, posso fare un repository clonato con --bare essere come uno clonato con --mirror? Può essere fatto semplicemente modificando il file di configurazione?

In caso contrario, esiste un altro metodo che può convertire un repository nudo in un repository mirror?

Un'altra domanda, Perché non posso utilizzare git push --all in un mirror repo, mentre questo comando può essere eseguito in un repository nudo?

+2

È possibile banalmente modificare il file di configurazione in qualsiasi editor. Basta fare in modo che i riferimenti ai rami siano in un repository mirror (+ refs/*: refs/*), rimuovere i rami di tracciamento remoto (da packed-refs e refs/remote/*/*), aggiungere 'mirror = true' e rieseguire un 'git fetch'. – fork0

+0

@ fork0 questa banale operazione sembra non funzionare ... – thinke365

+0

esattamente cosa non funziona? Messaggio di errore? (A proposito, non ho menzionato in quale sezione è stato aggiunto 'mirror = true'. È' [core] '). – fork0

risposta

2

Se si clona il repository con git clone --mirror, quindi un git push --all, seguendo lo default matching push policy, si spingeranno tutti i rami locali al repository remoto.

Ma se il vostro repo remoto è stato aggiunto alla tua repo locale come riferimento remoto (cioè il vostro repo locale è stato clonato da un altro repo a distanza), poi un git push --all secondRemoteRepo Non troverete molti ramo di corrispondenza per spingere a, a meno che non si recuperino prima quei rami.
Quindi questo dovrebbe funzionare:

git fetch secondRemoteRepo 
git push --all secondRemoteRepo 
8

Per modificare un repository clonato con git clone --bare in uno che corrisponde a quello che sarebbe con un git clone --mirror, effettuare le seguenti operazioni:

$ git config remote.origin.fetch "+refs/*:refs/*" 
$ git config remote.origin.mirror true 

poi fare un tutto git fetch e dovrebbe essere aggiornato

0

Al giorno d'oggi:

git remote add --mirror=fetch origin <url> 

Poi

git fetch