Pergunta

Como faço para definir referência cabeça de um remoto Git para apontar para algo além de "mestre"?

Meu projeto tem uma política de não usar um ramo "mestre" (todos os ramos devem ter nomes significativos). Além disso, o repositório principal canônica só é acessível via ssh:. //, sem acesso shell (como GitHub ou Unfuddle)

Meu problema é que o repositório remoto ainda tem uma referência HEAD para refs / heads / master, mas eu preciso dele para apontar para um ramo diferente. Isso está causando dois problemas:

  1. Ao clonar o repo, lá isso,

    aviso:. Remoto CABEÇA refere-se a ref inexistente, incapaz de check-out

    Isso é confuso e inconveniente.

  2. O navegador de código baseado na web depende CABEÇA como base para navegar na árvore. Eu preciso cabeça para apontam para um branch válido, então.

Foi útil?

Solução

Não foi quase a mesma pergunta no GitHub um ano atrás.

A ideia era mudar o nome do branch master:

git branch -m master development
git branch -m published master
git push -f origin master 

Fazendo mestre ter o que você quer que as pessoas de usar, e fazer todos os outros trabalhos em ramos.

(a "git-symbolic-ref HEAD refs/head/published" não seria propagada para o repo remoto)

Este é semelhante ao " Como faço origem de exclusão / master em Git ".


Como disse em esta discussão : (grifo meu)

"git clone" cria apenas um único ramo local.
Para fazer isso, ele olha para o HEAD ref do repo remoto, e cria uma filial local com o mesmo nome como o ramo remoto referenciado por ele.

Assim, para embrulhar que se, você tem repo A e clone-lo:

  • referências HEAD refs/heads/master e que existe
    -> você tem uma filial local chamado de mestre, a partir de origem / master

  • referências CABEÇA refs/heads/anotherBranch e que existe
    -> você tem uma filial local chamado anotherBranch, a partir origin/anotherBranch

  • referências CABEÇA refs/heads/master e que não existe
    -> "clone git", reclama

Não tenho certeza se há alguma maneira de modificar diretamente o HEAD ref em um repo .

(que é a todos os pontos da sua pergunta, eu sei;))


Talvez a única maneira seria um "publicação para os pobres ", onde:

 $ git-symbolic-ref HEAD refs/head/published
 $ git-update-server-info
 $ rsync -az .git/* server:/local_path_to/git/myRepo.git/

Mas isso envolveria o acesso de escrita para o servidor, o que nem sempre é possível.


Como eu explico em " Git: Maneira correta de alterar o Active filial em um repositório nua ", git remote set-head não mudaria nada sobre o repo remoto.

Ele só iria mudar o ramo de rastreamento remoto armazenadas localmente no seu repo local, em remotes/<name>/HEAD.

Outras dicas

Update: Isso só funciona para a cópia local do repositório (o "cliente"). Por favor, veja os comentários dos outros abaixo.

Com uma versão recente do git (Fev 2014), o procedimento correto seria:

git remote set-head $REMOTE_NAME $BRANCH

Assim, por exemplo, mudar a cabeça no origin remoto para develop ramo seria:

git remote set-head origin develop

Uma vez que você menciona GitHub, para fazê-lo em seu site basta ir em seu projeto, em seguida, ...

admin > Default Branch > (choose something)

Feito.

Veja: http: // www .kernel.org / pub / software / SCM / git / docs / git-simbólico-ref.html

Isso define o ramo padrão no repositório git. Você pode executar este em repositórios nuas ou espelhados.

Uso:

$ git symbolic-ref HEAD refs/heads/<branch name>

(Já era basicamente a mesma pergunta " criar um simbólico git ref remoto repositório", que recebeu nenhuma resposta universal.)

Mas há respostas específicas para vários git "fazendas" (onde vários usuários podem gerenciar repos git através de uma interface restrito: via http e ssh): http://Github.com , http://Gitorious.org , http://repo.or.cz , Girar ( http://git.altlinux.org ).

Estas respostas específicas pode ser útil para aqueles que estão lendo esta página e pensar sobre esses serviços específicos.

Se você tiver acesso à repo remoto a partir de um shell, basta ir para o .git (ou o dir principal se seu um repo nua) e alterar o arquivo CABEÇA para apontar para a cabeça correta. Por exemplo, por padrão, ele sempre contém 'refs: refs / heads / master', mas se você precisar foo para ser a cabeça em vez disso, basta editar o arquivo HEAD e alterar o conteúdo de 'refs: refs / heads / foo' <. / p>

Você pode criar uma destacada mestre ramo usando apenas porcelana comandos Git:

git init
touch GO_AWAY
git add GO_AWAY
git commit -m "GO AWAY - this branch is detached from reality"

Isso nos dá uma mestre ramo com uma mensagem parece rude (que você pode querer ser mais educado). Agora vamos criar o nosso ramo "real" (vamos chamá-lo tronco em honra do SVN) e divórcio lo de mestre :

git checkout -b trunk
git rm GO_AWAY
git commit --amend --allow-empty -m "initial commit on detached trunk"

Ei, presto! gitk --all irá mostrar mestre e tronco sem ligação entre eles.

A "mágica" aqui é que - alterar causas git commit para criar um novo comprometer com o mesmo pai como o atual chefe, em seguida, fazer ponto CABEÇA a ele . Mas o chefe atual não tem um pai como é o commit inicial no repositório, assim que o novo chefe não fica nem um, tornando-os separado um do outro.

O Chefe de idade commit não ficar excluído por git-gc porque refs / heads / mestre ainda aponta para ele.

O - permitir vazio bandeira só é necessário porque nós estamos cometendo uma árvore vazia. Se houvesse algum add git é após o git rm , então não seria necessário.

Na verdade, você pode criar um ramo separado a qualquer momento pela ramificação do commit inicial no repositório, a exclusão de sua árvore, adicionando sua árvore individual, em seguida, fazendo git commit --amend .

Eu sei que isto não responde à questão de como modificar o ramo padrão no repositório remoto, mas dá uma resposta limpa sobre como criar um ramo separado.

Em primeiro lugar, criar o novo ramo que você gostaria de definir como padrão, por exemplo:

$>git branch main

Em seguida, empurrar esse ramo para o origem :

$>git push origin main

Agora, quando você acessar sua conta GitHub, você pode ir ao seu repositório e selecione Configurações> Padrão Filial e escolha " main ."

Então, se assim preferir, você pode excluir o branch master:

$>git push origin :master

Para as pessoas gitolite, suportes gitolite um comando chamado - esperar por ele - symbolic-ref. Ele permite que você executar esse comando remotamente se você tiver W (escrever) permissão para o repo.

Em relação à pergunta, eu acabei aqui ao procurar por:

Como posso fazer um repositório local, ciente de um ramo padrão alterado no GitHub

Para completar, acrescentando a resposta:

git remote set-head origin -a

Simples apenas entrar em sua conta GitHub e sobre o lado direito no menu de navegação escolha Configurações , no Configurações Tab escolha Ramo padrão e voltar para a página principal do seu repositório que fez o truque para mim.

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