2012-08-09 17 views
19

Ho bisogno di esportare un contenuto del repository git e importarlo in un repository di destinazione. Conosco due alternative per farlo, ma non risolvono il mio problemaEsporta git con cronologia versioni

a) Aggiungere il repository di origine come remoto e fare unire alla destinazione. Non posso usarlo in quanto entrambi i repository non si trovano sulla stessa rete

b) Utilizzare l'archivio git e copiare il contenuto nella destinazione. In questo archivio di git le informazioni di revisione sono perse.

Ho bisogno di qualcosa che faccia un archivio insieme alla cronologia delle versioni e mi consenta di unirmi al target. Come si può fare?

risposta

40

git bundle è previsto per questo scopo esatto.

Esempio:

  1. Bundle il repository di origine nella sua interezza

    git bundle create my_repo.bundle --all

  2. Prendere `` my_repo.bundle '' al punto in cui il vostro obiettivo è

  3. Dal tuo obiettivo, carica gli oggetti di commit di origine

    git bundle unbundle my_repo.bundle

    ... da quale punto è possibile unire/rebase/cherry-pick la sorgente desiderata impegna nella vostra repository di destinazione al contenuto del vostro cuore.

    In caso contrario, tirando opere lo stesso:

    git pull my_repo.bundle

Rispetto alla clonazione, fasci sono più facili da trasferire perché sono più piccoli, come i file non vengono effettuate nel loro stato controllato .

Altri motivi per l'utilizzo di bundle:

  • A differenza di clone --bare (che non checkout i file), fasci vengono creati e confezionati in un unico file in modo che non è necessario ulteriore compressione/tarballing.

  • si potrebbe anche semplicemente pacchetto tar il repository di origine (o solo la directory .git ), ma si porta con sé più di tutti gli eccessi cache e spazzatura che si accumula sotto .git /.

+7

Puoi anche 'git clone my_repo.bundle'. Maggiori informazioni su http://git-scm.com/docs/git-bundle – jpbochi

+0

prima di unbundle, è necessario disporre di un repository di destinazione esistente o creare un nuovo repository mediante il comando git init, altrimenti si otterrebbe un errore. –

+0

@LinSongYang Il nuovo repository può anche essere creato clonando dal pacchetto il modo in cui descrive il primo commento. – antak

0

Si desidera creare un fork del repository attuale che sembrerebbe. Fammi sapere se ho capito bene: Vuoi clonare un particolare repository git. Lavorare sul clone e quindi unire le modifiche nel repository originale?

Questa operazione viene eseguita creando un fork del repository e quindi estraendo le modifiche dall'origine originale per le modifiche di commit.

+0

Il repository di origine non è direttamente accessibile. (Quindi non è possibile unire/clonare) Esiste un altro meccanismo di consegna per spostare le modifiche su due repository disconnessi? – codejammer

+0

Se la directory di origine non è accessibile come si prevede di copiare qualsiasi file da esso? – darnir

+0

Deve essere distribuito senza accesso diretto – codejammer

0

È possibile semplicemente comprimere la cartella completa del repository, quindi copiarla nella workstation di destinazione (tramite chiavetta USB, ecc.) E aggiungere tale repository locale come repository remoto. Quindi puoi recuperare e unire.

+0

FYI: Questo è spesso OK, ma ha uno svantaggio principale: si stanno trasferendo non solo i dati e la cronologia, ma anche tutte le impostazioni come ad esempio telecomandi url o ganci o nome utente ed e-mail della directory di lavoro, che è qualcosa che non vuoi fare. – quetzalcoatl

2

Git clona il repository su una penna USB, un laptop o un altro supporto di trasferimento dati. Collegalo all'altra macchina, aggiungi aggiungi il supporto come telecomando e carica/unisci le modifiche da lì ...

Qualsiasi clone dal repository contiene effettivamente tutta la cronologia, quindi la domanda è davvero come si può ottenere un clone all'altra macchina.

Vedi anche: this question

+0

Quindi abbiamo bisogno di clonare e quindi utilizzare il nostro meccanismo di archiviazione perché git archive ignora la cartella .git? – codejammer

+0

Sì, in pratica git-archive può creare un file zip/tarball di una specifica revisione e/o parte dell'albero, ma non conserva la cronologia. –

+0

Grazie, questo approccio funziona per me – codejammer

Problemi correlati