Alguém pode explicar um "ramo de rastreamento" como se aplica ao git?
Aqui está a definição de git-scm.com :
Uma 'ramificação de rastreamento' no Git é uma ramificação local conectada a uma ramificação remota. Quando você pressiona e puxa esse ramo, ele empurra e puxa automaticamente para o ramo remoto ao qual está conectado.
Use isso se você sempre puxa da mesma ramificação upstream para a nova ramificação e se não deseja usar "git pull" explicitamente.
Infelizmente, sendo novo no git e vindo do SVN, essa definição não faz absolutamente nenhum sentido para mim.
Estou lendo o " Guia Pragmático do Git " (ótimo livro, por sinal), e eles parecem sugerir que rastrear ramificações é uma coisa boa e que, depois de criar seu primeiro controle remoto (origem, neste caso), você deve configure sua ramificação principal para ser uma ramificação de rastreamento, mas infelizmente não cobre por que uma ramificação de rastreamento é uma coisa boa ou quais os benefícios que você obtém ao configurar sua ramificação principal para ser uma ramificação de rastreamento do seu repositório de origem .
Alguém pode me esclarecer (em inglês)?
fonte
--track
opção para criar uma ramificação (local) que tenha uma dessas ramificações de rastreamento remoto definidas como upstream . A terminologia evoluiu um pouco entre 2006 e 2019, então pessoas diferentes podem às vezes significar algo diferente para cada uma dessas palavras.origin/master
: eles estão no seu repositório, mas são a maneira de o Git lembrar os nomes das ramificações, como visto em outro repositório Git emorigin
. Se você usar a palavra a montante , que é o termo mais moderno, para dizer que a suamaster
temorigin/master
definido como o seu montante , você pode evitar toda a confusão esta terminologia.Respostas:
O livro do ProGit tem uma explicação muito boa :
Rastreando Ramos
Marcar uma filial local a partir de uma filial remota cria automaticamente o que é chamado de filial de rastreamento. As ramificações de rastreamento são ramificações locais que têm um relacionamento direto com uma ramificação remota. Se você estiver em um ramo e tipo de rastreamento
git push
, o Git saberá automaticamente em qual servidor e ramo enviar. Além disso, executandogit pull
enquanto estiver em uma dessas ramificações buscará todas as referências remotas e será mesclada automaticamente na ramificação remota correspondente.Quando você clona um repositório, ele geralmente cria automaticamente uma ramificação mestre que rastreia a origem / mestre. É por isso que
git push
egit pull
trabalha fora da caixa sem outros argumentos. No entanto, você pode configurar outros ramos de rastreamento, se desejar - aqueles que não rastreiam ramos na origem e não rastreiam o ramo mestre. O caso simples é o exemplo que você acabou de ver, executandogit checkout -b [branch] [remotename]/[branch]
. Se você possui o Git versão 1.6.2 ou posterior, também pode usar a--track
abreviação:Para configurar uma filial local com um nome diferente da filial remota, você pode facilmente usar a primeira versão com um nome de filial local diferente:
Agora, sua filial local
sf
irá automaticamente empurrar para e retirarorigin/serverfix
.BÔNUS:
git status
informações extrasCom um ramo de rastreamento,
git status
você saberá a que distância está do seu ramo de rastreamento - útil para lembrá-lo de que você ainda não efetuou as alterações! Se parece com isso:ou
fonte
Abaixo estão minhas notas pessoais de aprendizado sobre as filiais de rastreamento do GIT, espero que sejam úteis para futuros visitantes:
Rastreando ramos e "git fetch":
fonte
O livro Pro Git menciona :
Não exatamente. A questão do SO " Tendo dificuldade em entender
git-fetch
" inclui:Mas, na verdade, depois de estabelecer um relacionamento de filial upstream entre:
master
origin/master
Em seguida, você pode considerar
master
como um ramo de rastreamento local : rastreia o ramo de rastreamento remotoorigin/master
que, por sua vez, rastreia o ramo principal do repositório upstreamorigin
.fonte
git status
receberei uma mensagem de rastreamento de confirmação com relação aos repositórios de origem e upstream? (Instalação: clonei o repo de alguém localmente, levei meu clone para um novo repo na minha conta do GitHub e defina localmente os controles remotos de origem e upstream para o meu repo do github e o repo clonado, respectivamente).Foi assim que adicionei um ramo de rastreamento para que eu possa puxá-lo para o meu novo ramo:
fonte