Eu tenho um repositório vazio que é usado como o repositório central do meu projeto. Todos os desenvolvedores fazem git clone <repo>
para compartilhar com ele. Quando eles fazem o clone, eles obtêm uma verificação geral do ramo mestre (a menos que o façam git clone -n
) porque o repo.git/HEAD
contém ref: refs/heads/master
, tornando este o ramo ativo .
A questão é: como altero o ramo ativo corretamente? Eu poderia simplesmente hackear o repo.git/HEAD
arquivo diretamente, mas isso parece desagradável e, bem, hacky.
Tentei fazer git checkout <otherbranch>
no .git
diretório repo , mas isso falhou porque não estava em uma árvore de trabalho.
Eu tentei, git update-ref HEAD refs/heads/otherbranch
mas apenas atualizei refs / heads / master para ser o mesmo que refs / heads / otherbranch (ok, eu fiz isso em um repositório fictício, não na minha produção!)
Eu tentei git update-ref --no-deref HEAD refs/heads/otherbranch
e isso quase funcionou. Ele atualizou o HEAD
arquivo, mas o definiu como o SHA1 do commit apontado por refs/heads/otherbranch
.
Estou testando com a versão git 1.7.0.2.msysgit.0
.
Suponho que não há como fazer isso git push
, pois permitir que todos alterem sua ramificação padrão parece um pouco inseguro (!), Mas certamente há uma maneira melhor de fazer isso no .git
diretório repo do que invadir diretamente o HEAD
arquivo.
Respostas:
Se você tiver acesso ao repositório remoto remoto, este artigo sugere :
conforme documentado no
git-symbolic-ref
Se você não tem acesso ao repositório remoto, veja minha resposta anterior .
Lembre-se de que um comando como
git remote set-head
:não altera a ramificação padrão do repositório remoto .
Ele altera apenas uma filial de rastreamento remoto armazenada no seu repositório local como
refs/remotes/<name>/HEAD
não muda a
HEAD
si próprio (novamente, apenasrefs/remotes/<name>/HEAD
), daí a necessidadegit symbolic-ref
.Portanto,
git remote set-head
não é a resposta aqui.git symbolic-ref HEAD
ou seja, se você tiver acesso direto ao repositório remoto.fonte
git symbolic-ref HEAD refs/heads/mybranch
funcionou muito bem para mim! OBRIGADO! ;)Para alterar a ramificação, você precisa alterar a referência HEAD para a ramificação que deseja usar.
Primeiro liste todas as referências no repositório bare, executando
Em seguida, encontre a referência para sua filial, o formato será o seguinte
refs/heads/<my_branch>
. Portanto, o próximo passo é verificar a referência atual, basta digitar:para saber qual é o ramo atual, atualize-o conforme necessário.
Thant é isso. Aproveitar.
fonte
Como alterar o ramo ativo corretamente?
status: git checkout no diretório repo .git retorna fatal: Esta operação deve ser executada em uma árvore de trabalho
dicas: basta adicionar o argumento --work-tree
exemplo detalhado: suposições: bare git no servidor remoto:
no servidor local: crie a versão da filial.1.7 (nossa outra ramificação)
git branch version.1.7
git push origin version.1.7
no servidor remoto com repositório git bare:
$ cd ~ / bare_git_repository.git
Ramo $ git
version.1.7
Conforme indicado, após o comando
git checkout version.1.7
Retorna
fatal: Esta operação deve ser executada em uma árvore de trabalho
Usando o seguinte comando
alterar com êxito a ramificação ativa
Ramo $ git
mestre
verifique os resultados com o seguinte
espero que ajude
fonte
Além disso, se você não tiver acesso ao repositório vazio, faça um
git remote set-head
e estará prontoVeja esta resposta anterior
fonte
Também tenho um repositório simples em nosso servidor e consegui recuperar arquivos usando
em um novo repositório local, mesmo que a página de manual diga que isso é apenas para repositórios não vazios.
fonte
Comparei dois diretórios antes e depois de aplicar
git symbolic-ref HEAD refs/heads/mybranch
e parece que apenas o arquivo repo.git / HEAD foi alterado, provavelmente é bastante seguro "hackear" o arquivo.
fonte