228 votes

Comment créer un nouveau dépôt GitHub à partir d'une branche d'un dépôt existant?

Dans mon repo, j'ai "maître" et un "nouveau projet" les branches. J'aimerais créer un nouveau repo avec son maître basée sur le nouveau projet de la branche.

Le scénario: j'ai un répertoire qui contient trois applications indépendantes. Il n'a pas commencé de cette façon. Il était à l'origine une seule application dans le repo. Au fil du temps, cependant, les besoins ont changé. Une application est devenu deux (un héritage et une version ré-écrire.) Un service web a été ajouté. Les branches distinctes ont été utilisées pour contenir les trois projets. Cependant, ils ne partagent pas tous le code. Et de sorte qu'il serait plus simple de les avoir divisés en leurs propres titres.

410voto

Dogweather Points 2487

J'ai commencé avec @user292677 idée, et raffiné à résoudre mon problème:

  1. Créer le new_repo sur github.
  2. cd de votre copie locale de l'opération que vous souhaitez dupliquer, qui est suivi de l' old_branch que vous souhaitez utiliser comme new_repo'maître.
  3. git push git@github.com:accountname/new_repo +old_branch:master

Le nouveau dépôt Github est fini. Le résultat est;

  • un nouveau dépôt Github nommé new_repo,
  • dont le maître correspond à old_branch, avec
  • toute l'histoire préservée.

En fait, j'ai trouvé qu'en utilisant cette méthode, j'ai pu créer le nouveau repo avec un cueillies à la main la sélection des branches, renommé comme je le voulais:

git push git@github.com:accountname/new_repo +old_branch:master +site3a:rails3

Le résultat est que la pré-existant site3a branche est maintenant également déplacé vers le nouveau repo et apparaît comme rails3. Cela fonctionne vraiment bien: le réseau diagramme montre le nouveau maître et rails3 avec un historique complet et dans leur relation les uns avec les autres.

Mise à jour 2013-12-07: Utilisé avec un autre projet, et a vérifié que cette recette fonctionne toujours.

9voto

J. C. Salomon Points 1542

git clone -b new-project /path/to/repo /new/repo/path

Edit: au Sein de GitHub, vous pouvez "la fourchette", les pensions de titres, puis allez à l'onglet Admin dans votre clone. Sous "nom du Référentiel" et "Visibilité" est "de la Branche par Défaut" avec un menu déroulant de branches. Choisissez new-project.

Re-edit: je viens de réaliser que c'est l' master branche que vous souhaitez définir, non seulement le "défaut" de la branche. Alors...

• Sur GitHub, clone them/repo de you/repo.
• Exécutez git clone git@github.com:you/repo.git
• Commencez gitk.
• [Vous pouvez créer un old-master de la branche afin de ne pas perdre la trace de l'ancien s'engage.]
• Trouver le plus récent engager sur l' new-project de la branche, cliquez-droit sur le message de commit, et sélectionnez "Réinitialiser la branche master d'ici". (Vous pouvez également le faire à la ligne de commande à l'aide de git-reset, mais je n'ai pas trouvé la bonne invocation.)

Votre prochaine pousser jusqu'à votre dépôt GitHub devra être fait avec l' --force option, mais sinon, vous avez terminé.

Si c'est celui de votre propre repos que vous faites pour...
• Exécutez git clone git@github.com:you/orig.git
• Exécutez git clone orig copy
• Comme je l'ai décrit ci-dessus, mais à l'intérieur de locaux copy repo, réinitialiser l' master de la branche à l'endroit où vous le voulez.
• Créer le vide d'un projet GitHub you/copy. Suivez les instructions sur GitHub pour définir le projet comme une télécommande pour votre version locale de l' copy, pousser master, et vous avez terminé!

2voto

Kjuly Points 15089

Pas sûr que ce soit un bon moyen, mais c'est quand même facile:

 git clone -b new-project git@github.com:User/YourProject.git newProjcet
 

Créez ensuite un nouveau dépôt sur github et appuyez dessus.

0voto

Julio Flores Points 31

Rappelez-vous que lorsque vous créez simplement un nouveau référentiel, vous perdez la référence à l'ancien et vous compliquez la tâche de maintenance de toute mise à jour du projet d'origine synchronisé avec le nouveau. Peut-être n'est-il pas préférable de fourrer le repo?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X