Como atualizar um clone do git --mirror?

144

Criei um repositório git para espelhar um site ativo (que é um repositório git não nu):

git clone --mirror ssh://[email protected]/path/to/repo

Agora, para manter esse clone espelhado atualizado com todas as alterações de sua origem remota, qual comando ou comandos devo usar?

Gostaria de manter tudo atualizado: commits, refs, hooks, branches, etc.

Obrigado!

J. Bruni
fonte

Respostas:

213

Este é o comando que você precisa executar no espelho:

git remote update
ralphtheninja
fonte
@ Magnus Skog: Ótimo. Obrigado! Isso é tudo? Preciso de outro comando, como git fetch? Ou git remote updatesozinho fará tudo isso?
J. Bruni
11
Gostaria de saber também qual é a diferença para o git fetch.
Thorbjørn Ravn Andersen
1
@ Thorbjörn (você terá a ver com um sueco ö :)): O Git fetch apenas atualiza seu repositório com referências remotas do controle remoto. Este comando atualiza tudo no repositório espelhado.
Ralphtheninja
4
Aqui está uma boa resposta que explica mais: stackoverflow.com/questions/3959924/…
ralphtheninja
16
O 'git remote update --prune' fará tudo isso, mas removerá as ramificações quando elas forem removidas do repositório original.
precisa saber é o seguinte
8

Em relação a commits, refs, branches e " et cetera ", a resposta Magnus simplesmente funciona ( git remote update).

Mas, infelizmente, não há como cloneespelhar update os ganchos , como eu queria ...

Eu encontrei este tópico muito interessante sobre clonagem / espelhamento de ganchos:

http://kerneltrap.org/mailarchive/git/2007/8/28/256180/thread

Eu aprendi:

  • Os ganchos não são considerados parte do conteúdo do repositório.

  • Há mais dados, como a .git/descriptionpasta, que não é clonada, assim como os ganchos.

  • Os ganchos padrão que aparecem no hooksdiretório vêm doTEMPLATE_DIR

  • Existe esse templaterecurso interessante no git.

Portanto, eu posso ignorar essa "coisa de clonar os ganchos" ou seguir uma rsyncestratégia, considerando os propósitos do meu espelho (backup + fonte para outros clones, apenas).

Bem ... Vou esquecer a clonagem de ganchos e git remote updateseguir o caminho.

  • Sehe acabou de salientar que não apenas os "ganchos" não são gerenciados pelo clone/ updateprocess, mas também stashes, re -ereer, etc ... Portanto, para um backup rigoroso, rsyncou equivalente, seria realmente o caminho a percorrer. Como isso não é realmente necessário no meu caso (posso me dar ao luxo de não ter ganchos, esconderijos etc.), como eu disse, vou me ater ao remote update.

Obrigado! Melhorei um pouco do meu "git-fu" ... :-)

J. Bruni
fonte
5

Veja aqui: O Git não clona todas as ramificações dos clones subseqüentes?

Se você realmente quer isso puxando galhos em vez de push --mirror, pode dar uma olhada aqui:

"buscar - todos" em um repositório git bare não sincroniza ramificações locais com as remotas

Esta resposta fornece etapas detalhadas sobre como conseguir isso com relativa facilidade:

ver
fonte
1
pushnão é uma opção para mim porque preciso fazê-lo no lado receptor (de onde o clone está); pulltambém não é uma opção, porque um repositório espelho é um repositório vazio (sem árvore de trabalho, portanto, sem "puxar") - parece que git remote updaterealmente faz tudo (muito mais fácil que a resposta mencionada) ... De qualquer forma, obrigado! Certamente, há informações valiosas nas perguntas / respostas vinculadas.
J. Bruni
1
ok, eu quis dizer puxar como na linguagem usual. Tecnologia push and pull. Quase não existe outra palavra, exceto a absurda 'obter os dados de um controle remoto ativamente no cliente' que não dublaria uma palavra que tenha significado para sistemas git ou DVCS :) O segundo link fornecerá os detalhes que você deseja. Note, que 'update remoto git' se não de fato manter o status 'espelho', sem as operações extras mencionado lá
sehe
1
hmm ... desculpe (HTH) - parece que um espelho "absoluto" é mais facilmente alcançado através de um simples "rsync" da pasta repo original ... não é o que eu queria, mas .. apenas fiz alguns testes ... e nada parece copiar os ganchos - que eu estou particularmente interessado em ...
J. Bruni
1
Para sua informação, os propósitos desse espelho são os seguintes: 1) backup completo de onde eu posso restaurar se os dados no servidor repo original forem perdidos; 2) em algum lugar de onde outros podem clonar a partir de e obter um repo de trabalho local, sem ter qualquer acesso ao repo fonte original
J. Bruni
1
Se você quer ganchos e tudo, a gitosis pode (não se lembra bem) ter o que você precisa, mas eu continuaria rsyncnesse caso. Além disso, suponho que você esteja se esquecendo de esconderijos (veja aqui ) e rerere informações também ...?
Veja