534 votes

GitHub : Comment rendre privé un fork de dépôt public ?

Comment puis-je bifurquer d'un dépôt public, mais rendre ma bifurcation privée ? J'ai l'abonnement pour supporter les dépôts privés.

764voto

Martin Konicek Points 7999

Les réponses sont correctes mais ne mentionnent pas comment synchroniser le code entre le repo public et le fork.

Voici le flux de travail complet (nous l'avons fait avant l'open sourcing) React Native ):


Tout d'abord, dupliquer le repo comme d'autres l'ont dit (détails aquí ):

Créer un nouveau repo (appelons-le private-repo ) par l'intermédiaire du Interface utilisateur Github . Alors :

git clone --bare https://github.com/exampleuser/public-repo.git
cd public-repo.git
git push --mirror https://github.com/yourname/private-repo.git
cd ..
rm -rf public-repo.git

Clonez le dépôt privé afin de pouvoir travailler dessus :

git clone https://github.com/yourname/private-repo.git
cd private-repo
make some changes
git commit
git push origin master

Pour tirer les nouveautés du dépôt public :

cd private-repo
git remote add public https://github.com/exampleuser/public-repo.git
git pull public master # Creates a merge commit
git push origin master

Génial, votre repo privé a maintenant le dernier code du repo public plus vos changements.


Enfin, pour créer une pull request repo privé -> repo public :

Utilisez l'interface utilisateur de GitHub pour créer un fork du repo public (le petit bouton "Fork" en haut à droite de la page du repo public). Ensuite :

git clone https://github.com/yourname/the-fork.git
cd the-fork
git remote add private_repo_yourname https://github.com/yourname/private-repo.git
git checkout -b pull_request_yourname
git pull private_repo_yourname master
git push origin pull_request_yourname

Vous pouvez maintenant créer une demande de retrait via l'interface utilisateur de Github pour public-repo, comme décrit ci-dessous aquí .

Une fois que les responsables du projet ont examiné votre demande de retrait, ils peuvent la fusionner.

Bien sûr, tout le processus peut être répété (il suffit de laisser de côté les étapes où vous ajoutez des télécommandes).

0 votes

@Will Je suis dans la même situation, ma version git est la suivante git version 2.21.0.windows.1

0 votes

Je n'ai toujours pas trouvé le moyen de résoudre ce problème malheureusement, @Betlista et il est apparu à plusieurs reprises et je suis revenu ici pour trouver une solution :(

0 votes

@Will J'ai posé une question distincte - stackoverflow.com/questions/59729482/

185voto

szydan Points 129

Il y a maintenant une autre option (janvier 2015).

  1. Créer un nouveau dépôt privé
  2. Sur l'écran du repo vide, il y a une option/bouton "importer". enter image description here
  3. cliquez dessus et mettez l'url du repo github existant Il n'y a pas d'option github mentionnée mais cela fonctionne aussi avec les dépôts github. enter image description here
  4. FAIT

28 votes

Cela fonctionne, bien qu'un peu différemment. ( J'ai essayé en août 2015). Je n'ai pas trouvé l'option/bouton d'importation, alors j'ai fait une recherche sur Google et j'ai abouti à cette URL. import.github.com/new Ici, vous pouvez entrer l'url github existante et cliquer sur le bouton Vérifiez-le. bouton. Une fois vérifié, vous pouvez entrer le nom de votre nouveau repo et cliquer sur le bouton Privé, puis sur Commencer l'importation

2 votes

Je crois que @MattvanAndel veut dire que le commentaire est correct, pas la réponse originale. J'ai moi aussi suivi le commentaire de Shiva et cela a fonctionné. Notez que vous ne devez PAS créer le dépôt privé local en premier !

0 votes

Si je crée un "fork" privé de cette manière et que je veux en faire un fork public à nouveau, puis-je le faire ?

63voto

DJTano Points 61

Il suffit d'aller sur https://github.com/new/import .

GitHub Import

Dans la section "URL du clone de votre ancien dépôt" collez l'URL du dépôt que vous voulez et dans "Confidentialité" sélectionnez Private .

0 votes

NON SUPPORTÉ : Selon le support GitHub, l'importation est uniquement destinée à convertir des projets externes en github et son utilisation sur des dépôts github peut avoir des conséquences inattendues. Il est évident que cela fonctionne pour certains projets, d'après les réponses ici, mais j'ai rencontré des problèmes en utilisant import sur un grand projet (c'est ce qui m'a conduit au support GitHub). Je pense que cela ne vaut pas la peine de prendre le risque lorsque la duplication d'un dépôt est simple.

9 votes

@cb4 bien, si vous ne dites pas quel problème vous avez rencontré, fondamentalement, ce n'est pas une valeur ajoutée.

52voto

stefano Points 901

Les réponses actuelles sont un peu dépassées, donc, pour plus de clarté :

La réponse courte est :

  1. Faites un clone nu du repo public.
  2. Créez-en un nouveau privé.
  3. Faites un poussée du miroir à la nouvelle privée.

Ceci est documenté sur GitHub : duplication d'un référentiel

8 votes

Existe-t-il un moyen de tirer les modifications en amont ? C'est important pour un repo qui a une licence libérale - j'ai rendu mon repo privé mais j'aimerais quand même fusionner les changements en amont.

5 votes

Oui, vous devriez pouvoir ajouter l'autre dépôt en tant que nouveau dépôt (de suivi) (par exemple 'other-repo') et ensuite récupérer et fusionner périodiquement les changements (par exemple 'git merge other-repo/stable').

39voto

bsuttor Points 390

Vous devez dupliquer le repo

Vous pouvez voir cette doc (de github)

Pour créer une duplication d'un dépôt sans bifurquer, vous devez exécuter une commande spéciale de clonage contre le dépôt original et faire un miroir vers le nouveau dépôt.

Dans les cas suivants, le dépôt vers lequel vous essayez de pousser - comme exampleuser/new-repository ou exampleuser/mirrored - devrait déjà exister sur GitHub. Voir "Créer un nouveau référentiel" pour plus d'informations.

Mise en miroir d'un référentiel

Pour faire une copie exacte, vous devez effectuer à la fois un bare-clone et un mirror-push.

Ouvrez la ligne de commande, et tapez ces commandes :

$ 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

Si vous voulez faire un miroir d'un dépôt dans un autre endroit, y compris obtenir des mises à jour de l'original, vous pouvez cloner un miroir et pousser périodiquement les changements.

$ git clone --mirror https://github.com/exampleuser/repository-to-mirror.git
# Make a bare mirrored clone of the repository

$ cd repository-to-mirror.git
$ git remote set-url --push origin https://github.com/exampleuser/mirrored
# Set the push location to your mirror

Comme avec un clone nu, un clone miroir inclut toutes les branches et balises distantes, mais toutes les références locales seront écrasées à chaque fois que vous récupérez, donc il sera toujours le même que le dépôt d'origine. Définir l'URL pour les poussées simplifie les poussées vers votre miroir. Pour mettre à jour votre miroir, récupérer les mises à jour et pousser, ce qui peut être automatisé en exécutant une tâche cron.

$ git fetch -p origin
$ git push --mirror

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

1 votes

Cela crée un clone du repo, mais il ne crée pas de fichier fourchette au sens de GitHub. Lorsque vous créez une fourche réelle dans GitHub, le texte "forked from exampleuser/repository-to-mirror" apparaît sous le nom de la fourche. Il montre également un arbre de tous les autres forks lorsque vous naviguez vers github.com/exampleuser/new-repository/network/members.

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