Git: O que é um ramo de rastreamento?

Alguém pode explicar um “ramo de rastreamento”, como se aplica ao git?

Aqui está a definição do git-scm.com :

Uma ‘ramificação de rastreamento’ no Git é uma ramificação local conectada a uma ramificação remota. Quando você empurra e puxa esse ramo, ele automaticamente empurra e puxa para o ramo remoto com o qual está conectado.

Use isso se você sempre extrair do mesmo branch upstream para o novo branch, e se você não quiser 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 ” The Pragmatic Guide to Git ” (ótimo livro, por sinal), e eles parecem sugerir que os ramos de rastreamento são 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 isso não cobre por que uma ramificação de rastreamento é uma coisa boa ou que benefícios você obtém configurando sua ramificação principal para ser uma ramificação de rastreamento de seu repository de origem .

Alguém pode, por favor, me esclarecer (em inglês)?

   

O livro ProGit tem uma explicação muito boa :

Filiais de Rastreamento

Fazer check-out de uma ramificação local de uma ramificação remota cria automaticamente o que é chamado de ramificação 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 uma ramificação de rastreamento e digitar git push, o Git saberá automaticamente em qual servidor e ramificação pressionar. Além disso, a execução do git pull em um desses ramos busca todas as referências remotas e, em seguida, é mesclada automaticamente no ramo remoto correspondente.

Quando você clona um repository, ele geralmente cria automaticamente um branch master que rastreia origem / master. É por isso que git push e git pull trabalham fora da checkbox sem outros argumentos. No entanto, você pode configurar outras ramificações de rastreamento, se desejar – aquelas que não rastreiam ramificações na origem e não rastreiam a ramificação principal. O caso simples é o exemplo que você acabou de ver, executando git checkout -b [branch] [remotename]/[branch] . Se você possui o Git versão 1.6.2 ou posterior, você também pode usar a abreviatura --track :

 $ git checkout --track origin/serverfix Branch serverfix set up to track remote branch refs/remotes/origin/serverfix. Switched to a new branch "serverfix" 

Para configurar uma ramificação local com um nome diferente da ramificação remota, você pode usar facilmente a primeira versão com um nome de ramificação local diferente:

 $ git checkout -b sf origin/serverfix Branch sf set up to track remote branch refs/remotes/origin/serverfix. Switched to a new branch "sf" 

Agora, sua filial local sf irá automaticamente empurrar para e puxar de origin/serverfix .

O livro do Progit menciona:

Filiais de rastreamento são filiais locais que têm um relacionamento direto com um ramo remoto

Não exatamente. a questão da SO “É difícil entender o git-fetch ” inclui:

Não existe esse conceito de ramificações de rastreamento locais , apenas ramificações de rastreamento remoto .
Portanto, origin/master é uma ramificação de rastreamento remoto para master no repository de origin .

Mas, na verdade, depois de estabelecer um relacionamento de ramificação upstream entre:

  • um ramo local como master
  • e um ramo de rastreamento remoto como origin/master

Então você pode considerar master como uma ramificação de rastreamento local : ele rastreia a origin/master ramificação de rastreamento remoto que, por sua vez, rastreia a ramificação principal da origin repository upstream .

texto alternativo

Abaixo estão as minhas notas de aprendizado sobre as agências de rastreamento do GIT. Espero que seja útil para futuros visitantes:

insira a descrição da imagem aqui insira a descrição da imagem aqui insira a descrição da imagem aqui insira a descrição da imagem aqui insira a descrição da imagem aqui insira a descrição da imagem aqui


Ramos de rastreamento e “git fetch”:

insira a descrição da imagem aqui insira a descrição da imagem aqui insira a descrição da imagem aqui

Foi assim que adicionei uma ramificação de rastreamento para poder extraí-la em minha nova ramificação:

 git branch --set-upstream-to origin/Development new-branch