Como posso bifurcar um repositório público, mas tornar meu bifurcação privado? Eu tenho a assinatura para dar suporte a repositórios particulares.
Como posso bifurcar um repositório público, mas tornar meu bifurcação privado? Eu tenho a assinatura para dar suporte a repositórios particulares.
Respostas:
As respostas estão corretas, mas não mencionam como sincronizar o código entre o repositório público e o fork.
Aqui está o fluxo de trabalho completo (fizemos isso antes do código aberto React Native ):
Primeiro, duplique o repositório como outros disseram (detalhes aqui ):
Crie um novo repositório (vamos chamá-lo private-repo
) através da interface do usuário do Github . Então:
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
Clone o repositório particular para poder trabalhar nele:
git clone https://github.com/yourname/private-repo.git
cd private-repo
make some changes
git commit
git push origin master
Para obter novos gostos do repositório público:
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
Impressionante, seu repositório particular agora tem o código mais recente do repositório público e suas alterações.
Por fim, para criar um repositório privado de solicitação pull -> public repo:
Use a interface do usuário do GitHub para criar uma bifurcação do repositório público (o pequeno botão "Fork" no canto superior direito da página do repositório público). Então:
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
Agora você pode criar uma solicitação de recebimento via interface do usuário do Github para repositório público, conforme descrito aqui .
Depois que os proprietários do projeto analisam sua solicitação de recebimento, eles podem mesclá-la.
É claro que todo o processo pode ser repetido (deixe de fora as etapas em que você adiciona controles remotos).
git clone
configurar ramificações de rastreamento remoto e talvez alguma outra configuração no repositório clonado que você realmente não deseja. Enquanto um clone --bare apenas copia o diretório .git do controle remoto como está.
git status
mostra tudo atualizado, a árvore de trabalho limpa, não importa o que eu mude. Consequentemente, não posso comprometer e pressionar nada. Excluí o novo repositório particular que fiz mais duas vezes para tentar isso, mas continuei com esse mesmo problema. Alguma sugestão?
Há mais uma opção agora (janeiro-2015)
As respostas atuais estão um pouco desatualizadas, portanto, para maior clareza:
A resposta curta é:
Isso está documentado no GitHub: duplicando um repositório
Você precisa duplicar o repositório
Você pode ver este documento (no github)
Para criar uma duplicata de um repositório sem bifurcar-se, você precisa executar um comando clone especial no repositório original e enviar push para o novo.
Nos casos a seguir, o repositório para o qual você está tentando enviar - como exampleuser / new-repository ou exampleuser / mirrored - já deve existir no GitHub. Consulte "Criando um Novo Repositório" para obter mais informações.
Espelhando um Repositório
Para criar uma duplicata exata, é necessário executar um clone nu e um push de espelho.
Abra a linha de comandos e digite estes comandos:
$ 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
Se desejar espelhar um repositório em outro local, incluindo a obtenção de atualizações do original, você pode clonar um espelho e enviar periodicamente as alterações.
$ 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
Como em um clone simples, um clone espelhado inclui todas as ramificações e tags remotas, mas todas as referências locais serão substituídas toda vez que você buscar, portanto, sempre será o mesmo que o repositório original. Definir o URL para pushes simplifica o envio ao seu espelho. Para atualizar seu espelho, busque atualizações e envio por push, que pode ser automatizado executando uma tarefa cron.
$ git fetch -p origin $ git push --mirror
Agora o GitHub tem uma opção de importação que permite escolher o que você quer que seu novo repositório importado seja público ou privado.