Pergunta

Quando você executa git branch -r porque as chamas faz lista origin/HEAD? Por exemplo, há um repo remoto no GitHub, digamos, com dois ramos: mestre e incrível de recursos. Se eu fizer git clone para agarrá-lo e depois ir para o meu novo diretório e listar os ramos, eu vejo isso:

$ git branch -r
origin/HEAD
origin/master
origin/awesome-feature

Ou qualquer ordem que estaria em (alfa? Eu estou fingindo este exemplo para manter a identidade de um segredo repo inocente). Então, qual é o negócio HEAD? É o que a última pessoa a push tiveram sua HEAD apontou para quando eles empurraram? Não vai ser sempre que quer que fosse que pushed? HEADs mover ... porque eu me importo o que HEAD de alguém apontou em outra máquina?

Eu estou apenas começando uma alça sobre monitoramento remoto e tal, então esta é uma confusão persistente. Obrigado!

EDIT: Eu estava sob a impressão de que repos remoto dedicado (como o GitHub, onde ninguém vai ssh e trabalhar nesse código, mas apenas puxar ou empurrar, etc) não fez e não deveria ter uma cabeça porque não havia , basicamente, nenhuma cópia de trabalho. Não é assim?

Foi útil?

Solução

@robinst está correto.

Em git, você pode selecionar qual ramo está marcada por padrão (ou seja, quando você clonar). Por padrão, origin/HEAD irá apontar para isso.

No GitHub, Você pode mudar este nas configurações de administrador para seu repositório no GitHub. Você também pode fazê-lo a partir da linha de comando via

git remote set-head origin trunk

ou eliminá-lo completamente através

git remote set-head origin -d

Exemplo . Olhe para os 'switch Ramos' drop-down. trunk está marcada, então origin/HEAD segue trunk.

Outras dicas

A razão de um repositório nua pode ter uma cabeça, é que porque determina qual ramo é inicialmente check-out após um clone do repositório.

Normalmente, os pontos de cabeça para mestre, e que é o ramo que é verificada quando as pessoas clonar o repositório. Defini-lo para outro ramo (editando CABEÇA no repositório nua) resulta em que o ser ramo check-out no clone.

Eu estava sob a impressão de que repos remoto dedicado (como o GitHub onde ninguém vai ssh e trabalhar em esse código, mas só puxar ou empurrar, etc) não e não deve ter uma cabeça porque não havia, basicamente, nenhuma cópia de trabalho. Não é assim?

Eu tive exatamente a mesma impressão como você disse.

E eu mesmo não pode excluir que a origem / HEAD ramo clonado a partir github remoto de rastreamento fazendo

git branch -d -r origin/HEAD

Esta não teve nenhum efeito.

Pode alguém me dizer como posso excluir essa origem / HEAD de rastreamento remoto ramo?

actualizar

Embora eu não tenha encontrado porque há uma origem / HEAD criado quando clone de github, eu encontrar uma maneira de excluí-lo.

A nova versão do git fornecer

git remote set-head <name> -d

para excluir o ponteiro CABEÇA inútil de-rastreamento remoto ramo.

E podemos também mudar o nome padrão mudo 'origem' para o que quisermos usando

git remote rename origin <new_name>

Espero que isso pode ajudar. :)

Você está certo de que empurrando para repos remoto dedicado funcionam muito melhor quando eles são 'nua', isto é, quando eles não têm diretórios de trabalho. A arquitetura do Git é projetado para atualizar por manchas ou pull (fetch), o que faz sentido em um VCS distribuídos. Como os médicos dizem em algum lugar, empurrando a um ramo que está em check-out pode resultar em "resultados inesperados" .

A cabeça é parte dos requisitos para um repositório válido. repositório Git layout diz, em parte:

HEAD

A symref (see glossary) to the refs/heads/ namespace describing the currently active  
branch. It does not mean much if the repository is not associated with any working tree  
(i.e. a bare repository), but a valid git repository must have the HEAD file; some  
porcelains may use it to guess the designated "default" branch of the repository  
(usually master). It is legal if the named branch name does not (yet) exist.

Então, você vai ver a cabeça como parte da lista ramo, mesmo que "isso não significa muito ..."

Se "origem" é um repositório remoto, em seguida, identifica origem / HEAD do ramo padrão em que repositório remoto.

Exemplo:

$ git remote show
origin
$ git remote show origin
* remote origin
  Fetch URL: git@github.com:walkerh/pipe-o-matic.git
  Push  URL: git@github.com:walkerh/pipe-o-matic.git
  HEAD branch: master
  Remote branch:
    master tracked
  Local branch configured for 'git pull':
    master merges with remote master
  Local ref configured for 'git push':
    master pushes to master (fast-forwardable)

Observe a linha que diz "ramo CABEÇA: mestre". Este é o lugar onde o repositório remoto permite que os clientes sabem que se ramificam para Caixa por padrão.

Há sempre uma cabeça que pontos para o ramo em check-out no repo remoto (que pode ou não ser o mestre). Mesmo repositórios remotos têm filiais atuais. Geralmente é mestre, e em cima da minha cabeça, eu não consigo pensar em nenhuma razão para que alguém iria querer mudá-lo, mas ele pode ser alterado.

Meu palpite é que alguém empurrou um galho e chamou-CABEÇA:

git push origin HEAD
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top