rsync

2009-09-09 14 views
20

Questa domanda probabilmente si basa sulla mia mancanza di comprensione del ruolo dei .gits e repository git in generale, ma:rsync

Posso rsync una directory con contenuti che ho creato con git init tra macchine ?

Ho un repository sul mio laptop, e l'unico modo per portarlo via da lì è scp/rsync verso un host remoto, dal quale posso scaricarlo di nuovo. Potrei rsync la struttura di directory completa tra questi host?

risposta

8

Sì, è possibile. IIRC, git usa un approccio relativo. Quindi è sicuro sincronizzarlo con un altro computer.

+1

E 'possibile (con l'avvertenza che i remoti e le alternative basate su filesystem potrebbero non funzionare) se non si esegue alcun lavoro sul repository durante rsync. –

1

Sì, rsync la directory .git è possibile e genererà un clone completo del repository.

4

Sì, è possibile, ma è necessario farlo con un repository nudo, come illustrato in this thread.

$ git clone --bare ./projet projet.git 
$ rsync -a --stats --delete ./projet.git/ votre.serveur:~/projets/projet.git/ 

Nota: 6+ anni più tardi, git 2.8 (Marzo 2016) sarà ufficialmente deprecate e rimuovere completamente il git rsync protocollo!

Vedi commit 0d0bac6 (30 gen 2016) di Jeff King (peff).
(fusa per Junio C Hamano -- gitster -- in commit 9f03176 17 Feb 2016)

Si scopre "git clone" over rsync di trasporto è stato rotto quando repository di origine ha confezionato i riferimenti per un lungo periodo, e nessuno ha notato né si è lamentato di ciò.

Commit 0d0bac6 da Jeff King (peff) ha tutti i dettagli.

+2

Il repository bare è necessario solo quando si desidera eseguire il push su quel repository. Bit se si copia semplicemente il repository ogni volta, è possibile farlo con un repository completo. – Ikke

+2

È anche possibile utilizzare rsync per il repository completo. Non c'è niente di speciale nel repository nudo se si usa rsync. –

+0

@Ikke: vero, di solito faccio quel tipo di operazione con l'intento di spingerci sopra. – VonC

6

È possibile eseguire rsync senza problemi, ma se si dispone di alcuni telecomandi dichiarati con nomi host che sono locali alla macchina (cioè memorizzati solo in/etc/hosts), quelli ovviamente non funzioneranno.

Tuttavia, c'è qualche ragione per cui non si utilizza git stesso per sincronizzare il contenuto?

+0

Stavo pensando che siccome il mio server remoto non ha git non potevo spingerlo a farlo – svrist

+1

Vero, se vuoi usare push tramite SSH, devi git anche sul server (ma puoi averlo installato localmente, e usare Opzione '--receive-pack' a' git-push', e un'opzione simile per fetch/pull/clone). Se si desidera trasmettere tramite HTTP, è necessario disporre solo del server Web con WebDAV, configurato per consentire l'accesso push per l'utente (non è necessario alcun git sul server). –

27

ci sono un paio di possibilità:

  • Si può solo rsync repository .git (o anche tutta la repository insieme a directory di lavoro), a condizione che non si dispone di alcuna attività nel repository durante rsync ing (stesso disclaimer come per l'utilizzo del protocollo rsync://).

  • È possibile clonare o recuperare utilizzando deprecatorsync protocollo (dove repository URL/posizione simile a questa: "rsync://host.xz/path/to/repo.git/"). Nota che questo protocollo è deprecato, perché se c'è qualche attività nel repository, puoi ottenere cloni corrotti (o fetch).

    Inoltre, come ho sentito, non funzionava correttamente in presenza di reflets imballati dal 2007 e nessuno se ne è accorto fino a poco tempo fa. Lo farà (scomparirà) in Git 2.8.

  • Oppure si può creare git bundle, rsync o scp su altra macchina, e poi clonare o prendere dal fascio.

+1

Come noto [nella mia risposta di seguito] (http://stackoverflow.com/a/1398041/6309), git 'rsync: //' il protocollo * finalmente * scomparirà solo in git 2.8 (marzo 2016, 10+ dopo iniziando a essere dichiarato "deprecato"!) – VonC

0

Usare rsync per .git backup è possibile, ma con un fermo (almeno per me) Non può essere aggiornato. La prossima volta che proverai a rsync di nuovo, avrai una modifica massiva dell'oggetto .. e non potrai cancellarli .. Non hai familiarità con il sistema rsync o linux, rimuovo il backup .git prima di rsync.

Quale è:

> chmod -R 777 /path/of/your/backup/.git 
> rm -fr /path/of/your/backup/.git 
> rsync /path/of/your/origin/.git /path/of/your/backup/.git 

lo so, questo è molto faticoso e stupido .. Per favore fatemi sapere c'è un modo migliore per fare questo ..