Come duplicare un repository git? (senza biforcazione)


117

Ho due repository e ho bisogno di copiarne uno intero sull'altro vuoto che ha livelli di accesso diversi dal primo. La copia e il repository madre non devono essere collegati insieme.

Sono nuovo in git e sarebbe fantastico se qualcuno potesse aiutarmi in questo.


5
non sono sicuro, ma immagino che potresti semplicemente clonarlo e quindi usare git config remote.origin.url git: //new.url/proj.git per impostare remote.origin sul tuo nuovo rappresentante.
Rufinus

il link che ho appena pubblicato fa qualcosa del genere.
nbz

@ Rudinus ho fatto proprio questo. Grazie.
cowboybebop

Risposte:


205

Vedi https://help.github.com/articles/duplicating-a-repository

Versione breve:

Per creare un duplicato esatto, è necessario eseguire sia un bare-clone che un mirror-push:

mkdir foo; cd foo 
# move to a scratch dir

git clone --bare https://github.com/exampleuser/old-repository.git
# Make a bare clone of the repository

cd old-repository.git
git push --mirror https://github.com/exampleuser/new-repository.git
# Mirror-push to the new repository

cd ..
rm -rf old-repository.git  
# Remove our temporary local repository

NOTA: quanto sopra funzionerà bene con qualsiasi repository git remoto, le istruzioni non sono specifiche per GitHub

Quanto sopra crea una nuova copia remota del repository. Quindi clonalo sulla tua macchina da lavoro.


2
Cosa succede se il vecchio e il nuovo Repository avevano lo stesso nome (non lo stesso URL git). Come in I cloni solo Jeremy.gitin un altroJeremy.git
gran_profaci

Questo non sarà un duplicato esatto. I problemi non verranno trasferiti.
Slam

Questo preserva la storia?
Thomas,

@Thomas L'ho appena fatto e sì, ha conservato tutta la mia storia nella copia. Nota che dopo aver inserito e inserito il cd nel nuovo repository, non c'è ancora niente perché hai spinto al telecomando, quindi devi fare un pull
PfunnyGuy

7
Affinché questa risposta funzioni con GitHub, è necessario prima creare il nuovo repository su GitHub.
Alex Holcombe

23

Puoi anche usare git-copy .

Installalo con Gem,

gem install git-copy

Poi

git copy https://github.com/exampleuser/old-repository.git \
    https://github.com/exampleuser/new-repository.git

1
Come installi la gemma in primo luogo? Questa sembra la soluzione più semplice. Upvoted!
saran3h

Di solito fa parte di un'installazione di Ruby. Su Ubuntu fai sudo apt install ruby.
danno il

10

Se stai copiando su GitHub, puoi utilizzare GitHub Importer per farlo per te. Il repository originale può anche provenire da altri sistemi di controllo della versione.


4
Funziona perfettamente e mantiene anche la storia - dovrebbe essere votato più in alto
John D

1
Sono d'accordo. Questo approccio è molto più intuitivo, può essere eseguito interamente all'interno della GUI di Github e non implica nessuna di quelle confuse sciocchezze della riga di comando. Passaggi: 1) Nella GUI crea il nuovo repository ma non fare clic sulla casella di controllo "Inizializza questo repository con un README" Dopo aver fatto questo Github ti presenterà una nuova pagina e un'opzione etichettata "... o importa il codice da un altro repository. " Questo è tutto!
Luke F.

5

Se vuoi solo creare un nuovo repository usando tutti o la maggior parte dei file da uno esistente (cioè, come una sorta di modello), trovo che l'approccio più semplice sia creare un nuovo repository con il nome desiderato ecc., Clonalo in sul desktop, quindi aggiungi i file e le cartelle che desideri al suo interno.

Non ottieni tutta la cronologia ecc., Ma probabilmente non lo vuoi in questo caso.


-1

Apri Terminale.

Crea un clone nudo del repository.

git clone --bare https://github.com/exampleuser/old-repository.git

Mirror-push to the new repository.

cd old-repository.git

git push --mirror https://github.com/exampleuser/new-repository.git


Ho provato il tuo approccio. E ho ricevuto questo messaggio di errore:! [remoto rifiutato] master -> master (hook pre-ricezione rifiutato) e molti altri messaggi simili. L'ultimo era: errore: impossibile spingere alcuni ref. Come posso correggerlo?
LND
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.