Você pode explicar o que há de errado com esse fluxo de trabalho?
$ git init --bare bare
Initialized empty Git repository in /work/fun/git_experiments/bare/
$ git clone bare alice
Cloning into alice...
done.
warning: You appear to have cloned an empty repository.
$ cd alice/
$ touch a
$ git add a
$ git commit -m "Added a"
[master (root-commit) 70d52d4] Added a
0 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 a
$ git push
No refs in common and none specified; doing nothing.
Perhaps you should specify a branch such as 'master'.
fatal: The remote end hung up unexpectedly
error: failed to push some refs to '/work/fun/git_experiments/bare'
Nem git push
sempre é enviado para o repositório do qual clonei?
Respostas:
Sim, o problema é que não há confirmações em "bare". Este é um problema apenas com o primeiro commit, se você criar os repositórios na ordem (bare, alice). Tente fazer:
Isso seria necessário apenas na primeira vez. Depois deve funcionar normalmente.
Como Chris Johnsen apontou, você não teria esse problema se o seu push.default fosse personalizado. Eu gosto de upstream / rastreamento.
fonte
sudo apt-get upgrade git-core
esudo apt-get upgrade git
acho que nenhuma atualização é necessária.git --version
retorna 1.7.3.1. Alguma idéia do que está faltando? Admito que atualmenteapt-get update
não funciona para mim, mas isso não aconteceu há muito tempo.matching
; talvez você tenhapush.default
definido comoupstream
/tracking
(oucurrent
) no seu~/.gitconfig
?git push origin master:master
explicitar. Se isso não funcionar, verifique em qual filial você está:git branch
talvez você não tenha feito o primeiro commit ou o tenha feito em um branch que não seja o master.Se vocês:
ele será enviado ao repositório simples.
Parece que seu repo Alice não está rastreando corretamente.
Isso mostrará o controle remoto e a ramificação padrão.
Se vocês
Você deve começar a rastrear esse controle remoto e ramificação. Não tenho certeza se essa opção sempre esteve no git.
fonte
A resposta desta pergunta relacionada forneceu a solução para mim ... foi apenas um erro estúpido:
Lembre-se de se comprometer primeiro!
https://stackoverflow.com/a/7572252
Se você ainda não se comprometeu com seu repo local, não há nada a oferecer, mas a mensagem de erro Git que você recebe não ajuda muito.
fonte
é a maneira canônica de enviar tudo para um novo repositório vazio.
Outra maneira de fazer a mesma coisa é criar seu novo repositório não-nu e criar um clone vazio com
então use
no repositório original (não bare).
fonte
git push --all ../test_repo
a URL doTente isso em seu
alice
repositório (antes de pressionar):Ou configure-o como o padrão para o seu usuário
git config --global …
.git push
usa como padrão oorigin
repositório (que normalmente é o repositório do qual você clonou o repositório atual), mas não usa como padrão o envio da ramificação atual - o padrão é enviar apenas as ramificações existentes no repositório de origem e no repositório de destino.A
push.default
variável de configuração (consulte git-config (1) ) controla o quegit push
será enviado quando não houver argumentos "refspec" (isto é, algo após o nome de um repositório). O valor padrão fornece o comportamento descrito acima.Aqui estão os valores possíveis para
push.default
:nothing
Isso força você a fornecer um "refspec".
matching
(o padrão)Isso empurra todas as ramificações que existem no repositório de origem e no repositório de destino.
Isso é completamente independente da ramificação que está atualmente com check-out.
upstream
outracking
(Ambos os valores significam a mesma coisa. O último foi descontinuado para evitar confusão com as ramificações de "rastreamento remoto". O primeiro foi introduzido no 1.7.4.2, portanto você precisará usá-lo se estiver usando o Git 1.7.3.1. )
Eles enviam a ramificação atual para a ramificação especificada por sua configuração "upstream".
current
Isso envia a ramificação atual para a ramificação com o mesmo nome no repositório de destino.
Esses dois últimos acabam sendo os mesmos para casos comuns (por exemplo, trabalhando no mestre local que usa origem / mestre como upstream), mas são diferentes quando a ramificação local tem um nome diferente de sua ramificação "upstream":
Com
push.default
igual aupstream
(outracking
), o push iria paraorigin
o ramo principal de . Quando é igual acurrent
, o push iria paraorigin
a ramificação do quickfix .A
matching
configuração atualizarábare
o mestre do seu cenário, uma vez estabelecido. Para estabelecê-lo, você pode usargit push origin master
uma vez.No entanto, a
upstream
configuração (ou talvezcurrent
) parece ser uma correspondência melhor para o que você espera que aconteça; portanto, tente:(Novamente, se você ainda estiver usando um Git antes da 1.7.4.2, precisará usar em
tracking
vez deupstream
).fonte
Eu uso o cliente git SourceTree e vejo que o comando commit / push inicial é:
fonte