Como faço para definir a referência HEAD de um controle remoto do Git para apontar para algo além de "master"?
Meu projeto tem uma política para não usar uma ramificação "principal" (todas as ramificações devem ter nomes significativos). Além disso, o repositório principal canônico é acessível apenas via ssh: //, sem acesso ao shell (como GitHub ou Unfuddle).
Meu problema é que o repositório remoto ainda tem uma referência HEAD para refs / heads / master, mas preciso que aponte para um ramo diferente. Isso está causando dois problemas:
Ao clonar o repositório, aí está,
aviso: HEAD remoto refere-se a referência inexistente, incapaz de efetuar o checkout.
Isso é confuso e inconveniente.
O navegador de código baseado na Web depende do HEAD como base para navegar na árvore. Preciso HEAD para apontar para um ramo válido, então.
fonte
Respostas:
Havia quase a mesma pergunta no GitHub há um ano.
A ideia era renomear o ramo principal:
(um "
git-symbolic-ref HEAD refs/head/published
" não seria propagado para o repositório remoto)É semelhante a " Como faço para excluir a origem / mestre no Git ".
Como dito neste tópico : (ênfase minha)
(qual é o ponto principal da sua pergunta, eu sei;))
Talvez a única maneira seja uma "publicação para os pobres" , onde você:
Mas isso envolveria acesso de gravação ao servidor, o que nem sempre é possível.
Como explico em " Git: maneira correta de alterar o Active Branch em um repositório vazio? ",
git remote set-head
Não mudaria nada no repositório remoto.Somente alteraria a filial de rastreamento remoto armazenada localmente em seu repositório local, em
remotes/<name>/HEAD
.fonte
-f
(--force
). Eu editei a resposta de acordo. Então, a resposta que você faz referência usa a mesma opção.Atualização: Isso funciona apenas para a cópia local do repositório (o "cliente"). Veja os comentários de outras pessoas abaixo.
Com uma versão recente do git (fevereiro de 2014), o procedimento correto seria:
git remote set-head $REMOTE_NAME $BRANCH
Por exemplo, alternar a cabeça do controle remoto
origin
para o ramodevelop
seria:git remote set-head origin develop
fonte
git checkout -b default; git push origin HEAD; git remote set-head origin default
. Você pode inspecionar as alterações locais comcat .git/refs/remotes/origin/HEAD
(deveria serref: refs/remotes/origin/default
) e a falta de alterações remotas comgit remote show origin
(ainda será o que era antes de você adicionar a ramificação padrão).Desde que você mencionou o GitHub, para fazê-lo no site deles simplesmente entre no seu projeto, então ...
admin > Default Branch > (choose something)
Feito.
fonte
Veja: http://www.kernel.org/pub/software/scm/git/docs/git-symbolic-ref.html
Isso define a ramificação padrão no repositório git. Você pode executar isso em repositórios vazios ou espelhados.
Uso:
fonte
(Já havia basicamente a mesma pergunta " criar uma referência simbólica git no repositório remoto ", que não recebeu resposta universal.)
Mas existem respostas específicas para vários "farms" do git (onde vários usuários podem gerenciar repositórios git através de uma interface restrita: via http e ssh): http://Github.com , http://Gitorious.org , http: / /repo.or.cz , Girar ( http://git.altlinux.org ).
Essas respostas específicas podem ser úteis para quem lê esta página e pensa sobre esses serviços específicos.
$ ssh git.alt help | fgrep branch default-branch <path to git repository> [<branch>] $
por exemplo,ssh git.alt default-branch packages/autosshd.git sisyphus
alterar o HEAD no repositório remotoautosshd.git
para apontar para osisyphus
ramo.fonte
Se você tiver acesso ao repositório remoto a partir de um shell, basta acessar o .git (ou o diretório principal, se for um repositório simples) e alterar o arquivo HEAD para apontar para o cabeçalho correto. Por exemplo, por padrão, ele sempre contém 'refs: refs / heads / master', mas se você precisar que foo seja o HEAD, basta editar o arquivo HEAD e alterar o conteúdo para 'refs: refs / heads / foo'.
fonte
myrepo.git
. O conteúdo do arquivo HEAD no diretório especificado foi alterado deref: refs/heads/master
pararef: refs/heads/mainline
. Agora, quando tento clonar o repositório na minha caixa local, ele ainda aponta para o mestre. Eu executei ogit clone ssh://[email protected]/myrepo
comando. Alguma idéia para esse comportamento?git version 1.7.1
& versão do cliente Git:git version 1.9.4.msysgit.2
Você pode criar uma ramificação principal desanexada usando apenas comandos Git em porcelana:
Isso nos dá uma ramificação principal com uma mensagem rude (você pode ser mais educado). Agora criamos nosso ramo "real" (vamos chamá-lo de tronco em homenagem ao SVN) e o divorciamos do mestre :
Ei, pronto! gitk --all mostrará mestre e tronco sem nenhum link entre eles.
A "mágica" aqui é que --amend faz com que o git commit crie um novo commit com o mesmo pai que o HEAD atual e faça HEAD apontar para ele. Mas o HEAD atual não tem um pai, pois é o commit inicial no repositório, portanto, o novo HEAD também não recebe um, tornando-os separados um do outro.
O commit antigo HEAD não é excluído pelo git-gc porque refs / heads / master ainda aponta para ele.
O sinalizador --allow-empty é necessário apenas porque estamos comprometendo uma árvore vazia. Se houvesse algum add do git após o git rm , não seria necessário.
Na verdade, você pode criar uma ramificação desanexada a qualquer momento, ramificando o commit inicial no repositório, excluindo sua árvore, adicionando sua árvore desanexada e executando o git commit --amend .
Sei que isso não responde à pergunta de como modificar a ramificação padrão no repositório remoto, mas fornece uma resposta clara sobre como criar uma ramificação desanexada.
fonte
git fetch git:[email protected]:foo remote-branch-name && git checkout -b detached-branch FETCH_HEAD
adicionará uma nova ramificaçãodetached-branch
que corresponda à ramificaçãoremote-branch-name
no controle remotogit:[email protected]:foo
. Obviamente, o "remoto" pode ser um repositório no sistema de arquivos local que você preparou anteriormente.Primeiro, crie o novo ramo que você deseja definir como padrão, por exemplo:
$>git branch main
Em seguida, empurre esse ramo para a origem :
$>git push origin main
Agora, quando você faz login na sua conta do GitHub, pode ir ao seu repositório e escolher Configurações> Filial Padrão e escolher " principal ".
Então, se você escolher, poderá excluir o ramo principal:
$>git push origin :master
fonte
git symbolic-ref
no shell remoto ou modificar o arquivo de texto chamadoHEAD
no diretório raiz do repositório remoto.Relacionado à pergunta, acabei aqui ao pesquisar:
Como informar um repositório local sobre uma ramificação padrão alterada no GitHub
Para completar, adicione a resposta:
fonte
Para pessoas gitolitas, o gitolita suporta um comando chamado - aguarde -
symbolic-ref
. Ele permite que você execute esse comando remotamente se você tiver permissão W (gravação) no repositório.fonte
Simples, basta acessar sua conta do GitHub e, no lado direito do menu de navegação, escolher Configurações , na guia Configurações, escolha Filial padrão e retornar à página principal do seu repositório que fez o truque para mim.
fonte