Comment dupliquer un référentiel git? (sans fourche)

117

J'ai deux référentiels, et j'ai besoin de copier la totalité de l'un sur l'autre vide qui a des niveaux d'accès différents du premier. La copie et le référentiel mère ne doivent pas être liés ensemble.

Je suis nouveau dans git et ce serait génial si quelqu'un pouvait m'aider avec ça.

cowboybebop
la source
5
pas sûr, mais je suppose que vous pouvez simplement le cloner, puis utiliser git config remote.origin.url git: //new.url/proj.git pour définir remote.origin sur votre nouveau représentant.
Rufinus
ya le lien que je viens de publier fait quelque chose comme ça.
nbz le
@rudinus C'est exactement ce que j'ai fait. Merci.
cowboybebop

Réponses:

205

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

Version courte:

Afin de faire une duplication exacte, vous devez effectuer à la fois un clone nu et un push-miroir:

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

REMARQUE: ce qui précède fonctionnera correctement avec n'importe quel dépôt git distant, les instructions ne sont pas spécifiques à github

Ce qui précède crée une nouvelle copie distante du dépôt. Puis clonez-le sur votre machine de travail.

Larry K
la source
2
Que se passe-t-il si l'ancien et le nouveau référentiel ont le même nom (pas la même URL git). Comme dans je viens de Jeremy.gitJeremy.git
cloner
Ce ne sera pas une copie exacte. Les numéros ne seront pas transférés.
Slam du
Cela préserve-t-il l'histoire?
Thomas
@Thomas Je viens de faire ça et oui, ça a conservé toute mon histoire dans la copie. Notez qu'après avoir poussé et cd dans le nouveau repo, il n'y a toujours rien parce que vous avez poussé vers la télécommande, vous devez donc faire un pull
PfunnyGuy
7
Pour que cette réponse fonctionne avec GitHub, il faut d'abord créer le nouveau référentiel sur GitHub.
Alex Holcombe
23

Vous pouvez également utiliser git-copy .

Installez-le avec Gem,

gem install git-copy

ensuite

git copy https://github.com/exampleuser/old-repository.git \
    https://github.com/exampleuser/new-repository.git
Quanlong
la source
1
Comment installez-vous gem en premier lieu? Cela semble être la solution la plus simple. Vote positif!
saran3h
Il fait généralement partie d'une installation Ruby. Sur Ubuntu, faites sudo apt install ruby.
mal
10

Si vous copiez sur GitHub, vous pouvez utiliser l' importateur GitHub pour le faire pour vous. Le dépôt d'origine peut même provenir d'autres systèmes de contrôle de version.

Mateus Gondim
la source
4
Cela fonctionne parfaitement et garde même l'histoire - devrait être voté plus haut
John D
1
Je suis d'accord. Cette approche est beaucoup plus intuitive, elle peut être effectuée entièrement dans l'interface graphique de Github et n'implique aucune de ces absurdités déroutantes en ligne de commande. Étapes: 1) Dans l'interface graphique, créez le nouveau référentiel mais ne cochez pas la case "Initialiser ce référentiel avec un README" Après cela, Github vous présentera une nouvelle page et une option intitulée "… ou importer le code depuis un autre référentiel. " C'est tout!
Luke F.
5

Si vous souhaitez simplement créer un nouveau référentiel en utilisant la totalité ou la plupart des fichiers d'un existant (c'est-à-dire comme une sorte de modèle), je trouve que l'approche la plus simple consiste à créer un nouveau référentiel avec le nom souhaité, etc., le cloner sur votre bureau, puis ajoutez simplement les fichiers et les dossiers que vous souhaitez.

Vous n'obtenez pas toute l'historique, etc., mais vous ne le souhaitez probablement pas dans ce cas.

Tim
la source
-1

Ouvrez le terminal.

Créez un clone nu du référentiel.

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

Mirror-push to the new repository.

cd ancien-repository.git

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

Kundan roy
la source
J'ai essayé votre approche. Et j'ai eu ce message d'erreur:! [distant rejeté] maître -> maître (crochet de pré-réception refusé) et plusieurs autres messages similaires. Le dernier était: erreur: n'a pas réussi à pousser certaines références Comment puis-je corriger cela?
LND