Estou aprendendo a contribuir com projetos de código aberto no Github. Eu quero tentar corrigir um problema que se aplica ao branch 3.x, mas estou confuso porque o Github Desktop está me mostrando branches de origem e upstream:
Como é possível que eu possa mudar para uma ramificação no repositório upstream se estiver trabalhando em uma bifurcação? Isso não faz sentido para mim (mas tenha em mente que eu venho de um background Mercurial, então talvez eu não esteja entendendo completamente os branches do Git - eu acho que eles existem fora do controle de versão de alguma forma?).
Se o repositório upstream tiver alguns commits antes do meu fork no branch 3.xe eu clicar em upstream/3.x
, meu diretório de trabalho de alguma forma ganha as alterações desses commits upstream? Eu não acho que isso faça sentido, mas não consigo entender por que mais ele ofereceria mudar para um branch upstream.
As ramificações do Git funcionam como os favoritos do Mercurial. Eles não são imutavelmente anexados a commits, mas agem como ponteiros flexíveis para algum ID de commit (veja a documentação de Bookmarks do Mercurial ), então é totalmente possível que vários repositórios tenham seus próprios bookmarks apontando para o mesmo commit.
(Na verdade, é isso que acontece quando você envia para o GitHub - primeiro os commits são carregados e, em seguida, o marcador "principal" ou "mestre" do repositório remoto (ou seja, branch) é atualizado para apontar para eles, então agora o local e o remoto bookmarks apontam independentemente para o mesmo commit, e da mesma forma, quando você cria um novo branch local fora do "master", está apenas criando um segundo bookmark que aponta para o mesmo commit que o "master".
Embora pareça que as ramificações do Git não sejam mantidas tão estritamente sincronizadas com o repositório remoto quanto os favoritos do Hg. A divergência é esperada, portanto, as ramificações baixadas de um repositório remoto são sempre espaçadas com "reponame/", enquanto os documentos de Hg implicam que um marcador "foo@reponame" divergente deve ser tratado rapidamente.)
Você não está apenas trabalhando em uma bifurcação; você está trabalhando em um garfo do garfo. O repositório clonado que você tem em seu desktop é totalmente separado do fork que você tem no GitHub – ele tem seus próprios branches e tudo mais. (Nem os branches "origin/" nem os "upstream/" são realmente locais para o repositório que o GH Desktop está mostrando; eles são apenas cópias em cache local de branches remotos.)
Os repositórios Git não se limitam a ter um único URL para enviar/puxar – é muito comum ter dois ao trabalhar com bifurcações e buscar diretamente commits e branches de ambos. Por exemplo, você pode integrar as alterações upstream mais recentes mesclando "upstream/3.x" em seu "3.x" local e, em seguida, enviar para "origin/3.x" do seu fork do GitHub.
Sim. Seu repositório de desktop tem cópias completas de todos os branches do repositório upstream (a partir da última busca) e você pode verificar seus commits, criar branches locais deles, mesclar ou selecionar commits individuais em um branch local, etc. é mais geral do que apenas "upstream", você pode configurar qualquer número de controles remotos, por exemplo, para rastrear o fork de desenvolvimento de outra pessoa.)
No entanto, pelo menos usando as ferramentas de linha de comando
git
, verificar uma ramificação remota (seja "origin/3.x" ou "upstream/3.x") é uma operação temporária – ela não cria automaticamente uma ramificação local que você pode trabalhar, ele apenas verifica um commit "desanexado". Você ainda pode criar um branch a partir dele, mas não é automático.(Embora se você tentar verificar um branch "3.x" local inexistente , o Git o cria magicamente a partir de "origin/3.x".)
Eu não uso o GitHub Desktop há muito tempo, então não sei exatamente o que acontece se você verificar uma ramificação remota através da GUI - pode oferecer a criação de uma ramificação local "3.x" com o nome do remoto um, ou talvez não.