Comment puis-je bifurquer un référentiel public, mais rendre mon fork privé? J'ai l'abonnement pour prendre en charge les référentiels privés.
Comment puis-je bifurquer un référentiel public, mais rendre mon fork privé? J'ai l'abonnement pour prendre en charge les référentiels privés.
Réponses:
Les réponses sont correctes mais ne mentionnent pas comment synchroniser le code entre le dépôt public et le fork.
Voici le workflow complet (nous l'avons fait avant l'open sourcing React Native ):
Tout d'abord, dupliquez le dépôt comme d'autres l'ont dit (détails ici ):
Créez un nouveau dépôt (appelons-le private-repo
) via l' interface utilisateur de Github . Ensuite:
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 référentiel privé pour pouvoir y travailler:
git clone https://github.com/yourname/private-repo.git
cd private-repo
make some changes
git commit
git push origin master
Pour tirer une nouvelle actualité du référentiel 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 référentiel privé dispose désormais du dernier code du référentiel public ainsi que de vos modifications.
Enfin, pour créer un dépôt privé de pull request -> repo public:
Utilisez l'interface utilisateur GitHub pour créer un fork du référentiel public (le petit bouton "Fork" en haut à droite de la page du référentiel 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 d'extraction via l'interface utilisateur Github pour public-repo, comme décrit ici .
Une fois que les propriétaires de projet ont examiné votre demande d'extraction, ils peuvent la fusionner.
Bien sûr, tout le processus peut être répété (laissez de côté les étapes où vous ajoutez des télécommandes).
git clone
qui mettra en place des branches de suivi à distance et peut-être une autre configuration dans le dépôt cloné que vous ne voulez pas vraiment. Alors qu'un clone --bare copie simplement le répertoire .git de la télécommande tel quel.
git status
montre tout à jour, arbre de travail propre, peu importe ce que je change. Par conséquent, je ne peux rien engager et pousser quoi que ce soit. J'ai supprimé le nouveau dépôt privé que j'ai fait 2 fois de plus pour tenter cela, mais j'ai continué à rencontrer ce même problème. Aucune suggestion?
Il y a une option de plus maintenant (janvier-2015)
Les réponses actuelles sont un peu obsolètes donc, pour plus de clarté:
La réponse courte est:
Ceci est documenté sur GitHub: duplication d'un référentiel
Vous devez dupliquer le repo
Vous pouvez voir ce document (depuis github)
Pour créer un doublon d'un référentiel sans bifurquer, vous devez exécuter une commande de clonage spéciale par rapport au référentiel d'origine et pousser en miroir vers le nouveau.
Dans les cas suivants, le référentiel vers lequel vous essayez de pousser - comme exampleuser / new-repository ou exampleuser / mirrored - devrait déjà exister sur GitHub. Voir "Création d'un nouveau référentiel" pour plus d'informations.
Mise en miroir d'un référentiel
Pour créer un doublon exact, vous devez effectuer à la fois un clone nu et un push miroir.
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 souhaitez mettre en miroir un référentiel dans un autre emplacement, notamment en obtenant des mises à jour à partir de l'original, vous pouvez cloner un miroir et pousser régulièrement les modifications.
$ 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 en miroir inclut toutes les branches et balises distantes, mais toutes les références locales seront écrasées à chaque fois que vous les récupérez, ce sera donc toujours la même que le référentiel d'origine. La définition de l'URL pour les push simplifie la transmission vers votre miroir. Pour mettre à jour votre miroir, récupérez les mises à jour et envoyez-les, qui pourraient être automatisées en exécutant une tâche cron.
$ git fetch -p origin $ git push --mirror
GitHub a maintenant une option d'importation qui vous permet de choisir ce que vous voulez que votre nouveau référentiel importé soit public ou privé