Criei um repositório simples para publicar meu repositório, mas não consigo descobrir como atualizar o repositório simples com o estado atual do repositório principal.
Criei um repositório simples para publicar meu repositório, mas não consigo descobrir como atualizar o repositório simples com o estado atual do repositório principal.
Respostas:
Se você deseja duplicar todos os objetos do repositório principal, faça isso dentro do repositório principal:
git push --all <url-of-bare-repo>
Como alternativa, faça uma busca dentro do repositório vazio:
git fetch <url-of-main-repo>
Você não pode fazer um pull, porque um pull deseja mesclar com o HEAD
qual um repositório simples não possui.
Você pode adicioná-los como controles remotos para poupar algumas digitações no futuro:
git remote add <whatever-name> <url-of-other-repo>
Então você pode simplesmente fazer
git push --all <whatever-name>
ou
git fetch <whatever-name>
dependendo do repo em que você está. Se <whatever-name>
for origin
, você pode até deixar de fora.
Disclaimer: Eu não sou um git guru. Se eu dissesse algo errado, gostaria de ser esclarecido!
Atualização: Leia os comentários!
git-fetch --all
interior do repositório vazio, não vi as atualizações que fiz no repositório principal, mas ao empurrá-las do repositório principal, git push --all <url-of-bare-repo>
vejo as atualizações em git log
. Presumivelmente, há uma explicação simples para isso - alguém pode explicar?
git log
, não mostra essas atualizações no repo. (Nem git log --all
um nem outro repositório de trabalho criado ao clonar o repositório simples - via git log --all
ou simplesmente olhando para novos arquivos que devem aparecer lá). É um teste bem rápido de se ver. Principalmente, estou apenas curioso sobre o que estou perdendo.
git fetch -q origin master:master
dentro do seu repo simples. Isso irá buscar o novo material da ramificação principal do github e atualizar sua ramificação principal local.
master:master
é o necessário para avançar o HEAD para o repo remoto. No meu caso, por causa de um problema, não consegui mais me conectar ao nosso repositório simples porque o git estava ausente. Até que seja resolvido, faço um túnel reverso e busco o repositório central usando: git fetch ssh://localhost:8765/... master:master
e funciona como um encanto. Obrigado!
git fetch origin *:*
Criei um repositório usando o seguinte comando
git clone --bare <remote_repo>
Depois, tentei atualizar o clone vazio usando a resposta de Thomas, mas não funcionou para mim. Para atualizar o repositório vazio (que é o que eu acho que o Let_Me_Be estava perguntando), tive que criar um repositório espelho:
git clone --mirror <remote_repo>
Em seguida, eu poderia executar o seguinte comando no repositório espelhado para obter as atualizações do repositório principal:
git fetch --all
Me deparei com essa solução lendo Mirror a Git Repository Pulling
[remote "origin"]
seção, adicione fetch = +refs/*:refs/*
emirror = true
A única solução além de recriar git clone --mirror
é de Gregor :
git config remote.origin.fetch 'refs/heads/*:refs/heads/*'
então você pode git fetch
e verá as atualizações. O estranho é que, antes disso, mesmo que haja um remote
configurado, ele não possui ramificações listadas git branch -a
.
git remote update
faça o trabalho.
--force
e, --prune
respectivamente, à git fetch
linha.
Assumindo:
$ git clone --bare https://github.com/.../foo.git
Buscar com:
$ git --git-dir=foo.git fetch origin +refs/heads/*:refs/heads/* --prune
Nota: --git-dir=foo.git
não é necessário se você cd
acessar o diretório primeiro.
origin
não estiver definido, você sempre poderá substituir a origin
peça pelo caminho / URL do seu repositório original. por exemplo$ git --git-dir=foo.git fetch https://github.com/.../foo.git +refs/heads/*:refs/heads/*
Depois de muita bagunça, descobri que isso funciona para mim.
Uma vez:
git clone --mirror ssh://git@source.address:2000/repo
git remote add remote_site ssh://git@remote_site.address/repo
git config remote.origin.fetch 'refs/heads/*:refs/heads/*'
Sempre que eu quero sincronizar:
cd /home/myhome/repo.git
git --bare fetch ssh://git@source.address:2000/repo
git fetch ssh://git@source.address:2000/repo
git push --mirror remote_site
git config remote.origin.fetch 'refs/heads/*:refs/heads/*'
) é a chave. Boa resposta, obrigado!
git config remote.origin.fetch 'refs/heads/*:refs/heads/*'
é a resposta. Depois de pressionar este comando, posso apenas git fetch
e o repo é sincronizado com o remoto.
Adicione o repositório vazio como um repositório remoto e use git push
.
Para mim, essa combinação funcionou:
git remote add remote_site https://github.com/project/repo.git
git fetch -u remote_site +refs/heads/:refs/heads/*
git push --mirror
O parâmetro -u para busca era necessário, caso contrário, recebo a mensagem de erro: "Recusando buscar referências / cabeças / mestre de ramificações atuais do repositório não nu" (consulte também https://stackoverflow.com/a/19205680/4807875 )