Vous avez une branche privée d'un dépôt public sur GitHub?

128

J'ai un projet PHP public dans un repo GitHub, qui ne contient qu'une seule branche (maître).

Je veux avoir une branche / branche distincte qui est privée pour moi (j'ai payé pour les dépôts GitHub privés). Je voudrais pouvoir fusionner les modifications de la branche / branche privée au repo public, et vice versa.

Dans cet esprit, voici mes questions:

  1. Puis-je avoir une succursale privée sur un repo public?
  2. Puis-je convertir mon propre dépôt public dans ma propre branche / branche privée?
  3. Si les deux éléments ci-dessus sont possibles, quelle est la meilleure voie à suivre? Si ni l'un ni l'autre, comment dois-je procéder?
Lézard
la source
1
La meilleure idée n'est-elle pas de diviser votre référentiel public en tant que référentiel privé, où vous créez plusieurs branches que vous ne repoussez pas (en arrière) vers le référentiel public (et vice versa)?
Legolas
1
C'est ce que je demande, je veux pouvoir créer une copie du repo public mais mes mises à jour doivent être privées (à moins que je ne veuille repousser des choses spécifiques vers un public)
Lizard
1
24ways.org/2013/…
assylias
@assylias, pouvez-vous le mettre comme réponse? c'est la meilleure réponse à mon avis, et je n'ai pas fait attention à votre commentaire avant de trouver l'article moi-même.
mbh86
@ mbh86 Ce n'est pas vraiment une réponse, étant un lien, et je n'ai pas le temps d'en faire une réponse. Mais si vous souhaitez utiliser le contenu de cette page pour créer une réponse ici (avec une référence au site d'origine), cela pourrait certainement aider d'autres utilisateurs et vous obtiendrez mon vote positif :-)
assylias

Réponses:

69
  1. Dupliquez votre repo .
  2. Rendre le dépôt dupliqué privé sur GitHub.
  3. Cloner le dépôt privé sur votre machine
  4. Ajoutez une télécommande à votre référentiel public (git remote add public [email protected]: ...)
  5. Transférez les branches avec des commits destinés à votre dépôt public vers cette nouvelle télécommande publique. (assurez-vous de ne pas commettre accidentellement du code privé uniquement)
  6. Vous pouvez apporter des modifications à votre dépôt public à l'aide de 'git fetch public', puis les fusionner localement et les pousser vers votre dépôt privé (distant d'origine).
mj1531
la source
La duplication fonctionne bien pour moi, même si j'ai dû le faire dans l'ordre inverse, en créant d'abord un dépôt privé, puis en dupliquant le dépôt public à partir de la ligne de commande. Merci!
Joel
104

Est-il possible d'avoir une succursale privée sur un repo public?

Sur GitHub, votre référentiel est public ou privé; vous ne pouvez pas "privatiser" de manière sélective une seule succursale.

Puis-je convertir mon propre dépôt public dans ma propre branche / branche privée?

Vous pouvez cloner votre dépôt public sur votre machine locale, créer une branche si nécessaire, et simplement ne pas pousser vos branches "privées" en amont (en spécifiant quelle branche pousser vers l'origine: git push origin masterou git push origin branch-i-want-to-be-public:master).

Quelle est la meilleure voie à suivre / comment dois-je procéder?

Afin de tirer parti de GitHub pour votre développement public et privé, je suggérerais de forger votre branche publique dans GitHub, de changer les paramètres du nouveau fork sur "Private", puis de cloner la version privée sur votre machine locale. Lorsque vous êtes prêt à rendre les modifications publiques, transférez tout jusqu'à votre fork privé sur GitHub, puis utilisez des pull requests pour copier sélectivement les branches dans le référentiel public.

Pour rendre un référentiel privé sur GitHub, vous devez disposer d'un compte mis à niveau (payant) . Si vous ne faites que basculer le compte gratuit, vous pouvez toujours utiliser le premier processus que j'ai suggéré - cloner public vers la machine locale, branche et pousser des branches "publiques" spécifiques à l'origine - sans avoir besoin d'un dépôt privé.

Si vous avez un compte GitHub payant ou si vous utilisez un autre service qui propose des fourchettes publiques et privées et des pull requests (tel que BitBucket ), vous pouvez utiliser l'une des approches ci-dessus pour rendre votre code public.

Justin ᚅᚔᚈᚄᚒᚔ
la source
32
GitHub ne vous permet pas de rendre privé un fork d'un repo public. Vous auriez à dupliquer le dépôt pour le rendre privé, puis vous perdriez la connexion avec le dépôt public. Je me demande si vous pouvez ajouter le référentiel public en tant que télécommande distincte à votre clone local du référentiel privé. Puis poussez les branches vers cette télécommande.
mj1531
3
L'implication de ceci étant malheureusement qu'il n'est pas possible d'utiliser des pull requests pour extraire les modifications d'un «fork» privé vers une copie publique du référentiel.
Michael Mior
6
GitHub propose désormais des référentiels privés illimités pour les comptes gratuits.
Nathan F.
1
Cela ne devrait vraiment pas être la meilleure réponse étant donné que le flux de travail recommandé (PR à partir d'un fork privé) ne fonctionne pas. La réponse de @ mj1531 est un meilleur flux de travail.
stewSquared
3

Il existe une autre solution que je trouve meilleure car elle ne se traduit pas par des dépôts en double sur la même machine.

  • Créez une branche avec les choses que vous voulez privées.
  • Créez un nouveau dépôt sur GitHub, définissez-le sur privé.
  • Ajoutez un nouveau dépôt GitHub en tant que deuxième télécommande à votre dépôt sur votre machine.
  • Poussez la branche privée vers la deuxième télécommande.

Le résultat final est 1 référentiel avec 2 télécommandes. 1 public, 1 privé.
Il suffit de faire attention à ce que vous voulez nommer en conséquence.

Arthur Bowers
la source
1

1.) Est-il possible d'avoir une succursale privée sur un repo public

D'après ce que je sais, non.

2.) Puis-je convertir mon propre repo public dans ma propre succursale privée

Non, vous ne pouvez pas diviser un dépôt complet (branches 1-n) dans une seule branche. Eh bien, en fait, vous pourriez, si vous ne faites que bifurquer la seule branche du repo complet. Ajoutez-le simplement en tant que télécommande ou démarrez à partir d'un clone.

Vous pourriez également être intéressé par les caisses éparses .

3.) Si les deux éléments ci-dessus sont possibles, quelle est la meilleure voie à suivre

n / a

4.) Si ni l'un ni l'autre n'est possible, comment dois-je procéder?

n / a

hakre
la source