Ter uma filial particular de um repositório público no GitHub?


126

Eu tenho um projeto PHP público em um repositório GitHub, que contém apenas uma ramificação (mestre).

Quero ter uma ramificação / bifurcação separada que seja privada para mim (paguei por repositórios particulares do GitHub). Eu gostaria de poder mesclar alterações do ramo privado / bifurcação no repositório público e vice-versa.

Com isso em mente, aqui estão minhas perguntas:

  1. Posso ter uma filial particular em um repositório público?
  2. Posso bifurcar meu próprio repositório público em minha própria filial / bifurcação?
  3. Se as duas opções acima são possíveis, qual é o melhor caminho a seguir? Se não, como devo proceder?

1
Não é a melhor idéia bifurcar seu repositório público como um repositório privado, onde você cria várias ramificações que não envia (para trás) ao repositório público (e vice-versa)?
Legolas

1
Isso é o que eu estou pedindo, eu quero ser capaz de criar uma cópia de repo público, mas as minhas actualizações para ser privada (a menos que eu quero empurrar coisas específicas de volta para uma pública)
Lizard


@assylias, você poderia colocá-lo como resposta? é a melhor resposta na minha opinião e não prestei atenção ao seu comentário antes de encontrar o artigo.
mbh86 18/07/19

@ mbh86 Não é realmente uma resposta, é um link, e não tenho tempo para transformá-lo em resposta. Mas se você quiser usar o conteúdo dessa página para criar uma resposta aqui (com uma referência para o site original), ele certamente poderia ajudar outros usuários e você terá o meu upvote :-)
assylias

Respostas:


69
  1. Duplique seu repo .
  2. Torne o repositório duplicado um particular no GitHub.
  3. Clone o repositório particular em sua máquina
  4. Adicione um controle remoto ao seu repositório público (git remote adicione public git@github.com: ...)
  5. Envie ramificações com confirmações destinadas ao seu repo público para esse novo controle remoto público. (certifique-se de não confirmar acidentalmente código apenas privado)
  6. Você pode introduzir alterações em seu repositório público usando 'git fetch public' e depois mesclá-las localmente e enviar para seu repositório particular (origem remota).

A duplicação funciona bem para mim, embora eu tenha que fazer isso na ordem oposta, primeiro criando um repositório particular e depois duplicando o repositório público da linha de comando. Obrigado!
Joel

103

É possível ter uma filial privada em um repositório público?

No GitHub, seu repositório é público ou privado; você não pode "privatizar" seletivamente apenas um ramo.

Posso bifurcar meu próprio repositório público em minha própria filial / bifurcação?

Você pode clonar seu repositório público em sua máquina local, ramificar conforme necessário e simplesmente não enviar suas ramificações "privadas" a montante (especificando qual ramificação enviar pela origem: git push origin masterou git push origin branch-i-want-to-be-public:master).

Qual é o melhor caminho a seguir / como devo proceder?

Para tirar proveito do GitHub para seu desenvolvimento público e privado, sugiro bifurcar seu ramo público no GitHub, alterando as configurações do novo fork para "Privado" e clonando a versão privada na sua máquina local. Quando estiver pronto para tornar públicas as alterações, envie tudo para o seu fork particular no GitHub e use solicitações pull para copiar seletivamente ramificações para o repositório público.

Para tornar um repositório privado no GitHub, você deve ter uma conta atualizada (paga) . Se você estiver usando apenas a conta gratuita, ainda poderá usar o primeiro processo que sugeri - clonar público em máquina local, filial e enviar ramificações "públicas" específicas para a origem - sem precisar de um repo privado.

Se você possui uma conta paga no GitHub ou está usando outro serviço que oferece garfos públicos e privados e solicitações pull (como o BitBucket ), poderá usar uma das abordagens acima para tornar seu código público.


32
O GitHub não permite que você crie um fork de um repositório público privado. Você precisaria duplicar o repositório para torná-lo privado e perderia a conexão com o repositório público. Gostaria de saber se você pode adicionar o repositório público como um controle remoto separado ao seu clone local do repositório privado. Em seguida, empurre os galhos para o controle remoto.
Mj1531

3
Infelizmente, a implicação disso é que não é possível usar solicitações pull para obter alterações de um "fork" privado para uma cópia pública do repositório.
Michael Mior 24/06

6
Agora o GitHub oferece repositórios privados ilimitados para contas gratuitas.
Nathan F.

1
Essa realmente não deve ser a resposta principal, pois o fluxo de trabalho recomendado (PR de um fork particular) não funciona. A resposta de @ mj1531 é um fluxo de trabalho melhor.
usar o seguinte código

2

Existe outra solução que eu acho melhor, pois não resulta em repositórios duplicados na mesma máquina.

  • Faça um ramo com o que você deseja que seja privado.
  • Faça um novo repositório no GitHub, defina-o como privado.
  • Adicione um novo repositório GitHub como um segundo controle remoto ao seu repositório em sua máquina.
  • Empurre o ramo privado para o segundo controle remoto.

O resultado final é um repositório com 2 controles remotos. 1 público, 1 privado.
Só precisa ter cuidado com o que você pressiona para nomear de acordo.


1

1.) É possível ter uma filial privada em um repositório público

Pelo que sei, não.

2.) Posso colocar meu próprio repositório público em meu próprio ramo privado

Não, você não pode dividir um repositório completo (1-n ramificações) em uma única ramificação. Bem, na verdade você poderia, se você apenas bifurcar o único ramo do repositório completo. Basta adicioná-lo como um controle remoto ou iniciar a partir de um clone.

Talvez você também esteja interessado em verificações esparsas .

3.) Se ambos os itens acima forem possíveis, qual é o melhor caminho a seguir

n / D

4.) Se nenhum dos dois é possível, como devo proceder?

n / D

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.