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.
Quando fiz um git-fetch --allinterior 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?
Pho79 # 1/12
2
@ Thomas - Sim, por "não vi", quero dizer git log, não mostra essas atualizações no repo. (Nem git log --allum nem outro repositório de trabalho criado ao clonar o repositório simples - via git log --allou 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.
Pho79
71
Se o seu repo mais remoto for algo como o github, onde você não tem acesso, não pode executar push, etc., poderá fazê-lo git fetch -q origin master:masterdentro do seu repo simples. Isso irá buscar o novo material da ramificação principal do github e atualizar sua ramificação principal local.
Altreus
4
@Altreus De fato, 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:mastere funciona como um encanto. Obrigado!
Estani
3
@Altreus Se você quiser todos os ramos, em seguida, você pode fazergit fetch origin *:*
JBert
71
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:
Para alterar um repo bare existente para espelhar, tudo o que você precisa fazer é adicionar 2 linhas ao arquivo de configuração do git em <REPO> .git / config. Na [remote "origin"]seção, adicione fetch = +refs/*:refs/*emirror = true
Isaac Betesh 30/08/13
@IsaacBetesh Você salvou meu dia :)
smc
54
A única solução além de recriar git clone --mirroré de Gregor :
então você pode git fetche verá as atualizações. O estranho é que, antes disso, mesmo que haja um remoteconfigurado, ele não possui ramificações listadas git branch -a.
Isso realmente me ajudou! O projeto / repositório Capistrano também usa essa configuração para permitir que uma linha git remote updatefaça o trabalho.
Minqi Pan
1
Se o controle remoto tiver ramificações atualizadas ou excluídas à força (e você desejar refletir essas alterações), pode ser necessário adicionar --forcee, --prunerespectivamente, à git fetchlinha.
Embora eu não saiba quando isso ocorre, se originnão estiver definido, você sempre poderá substituir a originpeç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/*
antak 21/01
Era exatamente isso que eu estava procurando. Isso funcionou perfeitamente.
Maxime Rouiller
13
Depois de muita bagunça, descobri que isso funciona para mim.
A terceira linha ( git config remote.origin.fetch 'refs/heads/*:refs/heads/*') é a chave. Boa resposta, obrigado!
peterh - Restabelece Monica 27/03
2
Como @ Peterh disse, a linha git config remote.origin.fetch 'refs/heads/*:refs/heads/*'é a resposta. Depois de pressionar este comando, posso apenas git fetche o repo é sincronizado com o remoto.
Joker
3
Adicione o repositório vazio como um repositório remoto e use git push.
Então, se eu quiser fazer isso sem pressionar, não posso usar um repositório vazio e usar um link simbólico ou algo assim?
Šimon Tóth
O envio é o método normal para transferir o conteúdo do repositório para um repositório simples, não há necessidade de evitá-lo.
Philipp
2
Você nem sempre pode empurrar. Por exemplo, se o nu está em uma rede privada, e os principais acordos de recompra é um público (no GitHub, por exemplo)
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 )
Respostas:
Se você deseja duplicar todos os objetos do repositório principal, faça isso dentro do repositório principal:
Como alternativa, faça uma busca dentro do repositório vazio:
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:
Então você pode simplesmente fazer
ou
dependendo do repo em que você está. Se
<whatever-name>
fororigin
, 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!
fonte
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 emgit log
. Presumivelmente, há uma explicação simples para isso - alguém pode explicar?git log
, não mostra essas atualizações no repo. (Nemgit log --all
um nem outro repositório de trabalho criado ao clonar o repositório simples - viagit 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:
Em seguida, eu poderia executar o seguinte comando no repositório espelhado para obter as atualizações do repositório principal:
Me deparei com essa solução lendo Mirror a Git Repository Pulling
fonte
[remote "origin"]
seção, adicionefetch = +refs/*:refs/*
emirror = true
A única solução além de recriar
git clone --mirror
é de Gregor :então você pode
git fetch
e verá as atualizações. O estranho é que, antes disso, mesmo que haja umremote
configurado, ele não possui ramificações listadasgit branch -a
.fonte
git remote update
faça o trabalho.--force
e,--prune
respectivamente, àgit fetch
linha.Assumindo:
Buscar com:
Nota:
--git-dir=foo.git
não é necessário se vocêcd
acessar o diretório primeiro.fonte
origin
não estiver definido, você sempre poderá substituir aorigin
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:
Sempre que eu quero sincronizar:
fonte
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 apenasgit fetch
e o repo é sincronizado com o remoto.Adicione o repositório vazio como um repositório remoto e use
git push
.fonte
Para mim, essa combinação funcionou:
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 )
fonte