web-dev-qa-db-fra.com

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

J'ai master et new-project branches. Et maintenant, j'aimerais créer un nouveau dépôt avec son maître basé sur la branche de nouveau projet.

Contexte: j'ai un référentiel qui contient trois applications indépendantes. Cela n'a pas commencé comme ça. Il n'y avait à l'origine qu'une seule application dans le repo. Au fil du temps, toutefois, les besoins des entreprises ont évolué. Une application est devenue deux (une version héritée et une réécriture). Un service Web a été ajouté. Des branches distinctes ont été utilisées pour contenir les trois projets. Cependant, ils ne partagent aucun code. Et il serait donc plus simple de les répartir dans leurs propres pensions.

129
Dogweather

J'ai commencé avec l'idée de @ user292677 et je l'ai affinée pour résoudre mon problème:

  1. Créez le new-repo dans github.
  2. accédez à votre copie locale de l’ancien référentiel que vous souhaitez extraire, configuré pour suivre la branche new-project qui deviendra le maître de new-repo.
  3. $ git Push https://github.com/accountname/new-repo.git +new-project:master 

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

  • un nouveau référentiel Github nommé new-repo,
  • dont master correspond au new-project de l'ancien référentiel, avec
  • toute l'histoire préservée.

En fait, j'ai découvert qu'en utilisant cette méthode, je pouvais créer le nouveau référentiel avec une sélection de branches sélectionnée à la main, renommée comme je le voulais:

$ git Push [email protected]:accountname/new_repo +new-project:master +site3a:Rails3

Le résultat est que la branche site3a préexistante est également déplacée vers le nouveau référentiel et apparaîtra sous la forme Rails3. Cela fonctionne vraiment bien: le diagramme de réseau montre les nouveaux master et Rails3 avec un historique complet et leurs relations correctes.

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

Mise à jour 2018-01-11: Étape 3 mise à jour pour utiliser la recommandation GitHub pour le protocole https. La recette fonctionne toujours.

238
Dogweather

Mettre à jour:

cd au repo local contenant old_branch et:

$ git Push https://github.com/accountname/new_repo.git +old_branch:master
17
Alexey Kislitsin
git clone -b new-project /path/to/repo /new/repo/path

Éditer: Dans GitHub, vous pouvez “fourcher” le référentiel, puis aller dans l’onglet Admin de votre clone. Sous «Nom du référentiel» et «Visibilité» se trouve «Branche par défaut» avec un menu déroulant de branches. Choisissez new-project.

Ré-édition: je viens de me rendre compte que c’est la branche master que vous voulez définir, pas seulement la branche «par défaut». Alors…

  • Sur GitHub, clonez them/repo en you/repo
  • Exécuter git clone [email protected]:you/repo.git 
  • Démarrer gitk
  • [Vous voudrez peut-être créer une branche old-master pour ne pas perdre la trace des anciens commits.] 
  • Recherchez la dernière validation sur la branche new-project, cliquez avec le bouton droit de la souris sur le message de validation et sélectionnez «Réinitialiser la branche principale ici». (Vous pouvez également le faire sur la ligne de commande en utilisant git-reset, mais je n’ai pas trouvé le bon appel.)

Votre prochain envoi vers votre dépôt GitHub devra être effectué avec l’option --force, mais sinon vous avez terminé.

Si c’est l’un de vos propres dépôts, vous le faites pour…

  • Exécuter git clone [email protected]:you/orig.git 
  • Exécuter git clone orig copy 
  • Comme je l'ai décrit ci-dessus, mais dans le référentiel copy local, réinitialisez la branche master à l'emplacement souhaité. 
  • Créez le projet GitHub vide you/copy. Suivez les instructions sur GitHub pour configurer ce projet en tant que télécommande pour votre version locale de copy, Push master, et vous avez terminé!
8
J. C. Salomon

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 gestion des mises à jour du projet d'origine synchronisé sur le nouveau. Peut-être n'est-il pas préférable de fourrer le repo?

1
Julio Flores
  1. Créez le NEW_REPOSITORY dans github.
  2. cd OLD_REPOSITORY
  3. git Push https://github.com/accountname/NEW_REPO + master: master

Et c'est tout. (Note: l'historique des git préservé)

J'avais essayé la réponse ci-dessus et ne la trouvais pas assez précise car elle ne spécifiait pas + master: master, ce dont j'avais besoin pour que cela fonctionne. Cela fonctionne très bien.

Source (avec mes modifications pour éviter les problèmes ssh avec github): Mauricio Aiello, ancien développeur senior Java, https://www.quora.com/How-do-I-create-a-new-GitHub-repository-from -a-branche-dans-un-référentiel-existant

1
Joe

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

git clone -b new-project [email protected]:User/YourProject.git newProjcet

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

1
Kjuly

Petit ajout à la bonne réponse:

$ git Push [email protected]: nom du compte/new_repo + old_branch: maître

"[email protected]: accountname/new_repo" => obtenir de github "Cloner ou télécharger" menu déroulant

0
Gerd