git annex - como verificar 2 repositórios são exatamente idênticos

0

Como posso garantir que quando clonei, sincronizei e obtive conteúdo de outro repositório git annex que eu configurei um espelho idêntico?

Eu usei uma ferramenta como unison no passado, que fazia uma comparação de arquivo para arquivo, mas isso consome tempo e memória.

Existem outras alternativas para que eu possa realizar uma verificação de sanidade? A principal motivação para isso é que eu acabei de fazer um clone de um repositório existente, ele é menor. Espero que seja menor porque o repositório antigo tem objetos não utilizados ou não referenciados, mas é um pouco diferente em tamanho.

Então, eu gostaria de ter um cheque que possa ser executado.

    
por Walter 21.10.2016 / 22:52

2 respostas

0

Eu verifiquei o git annex como esperado, fazendo o seguinte:

  1. obtenha uma listagem de arquivos única e ordenada, incluindo o conteúdo .git (isso garante que tenhamos todos os conteúdos do anexo do git)
  2. obtenha uma listagem de links única e classificada incluindo o conteúdo .git (isso garante que tenhamos a mesma estrutura de repositório)
  3. compare as listagens de arquivos, ignore o diretório anexo / transferência, os objetos git podem ser diferentes, o conteúdo do git anexo deve ser idêntico
  4. comparar listagens de links, deve ser idêntico
  5. execute um git anexo fsck ou compare a soma de verificação para todos os arquivos (isso é um problema no sistema de arquivos)

Isso funciona, mas pode ser um pouco trabalhoso / intensivo. Além disso, o processo pode ser ainda mais complicado, tendo espelhos que são apenas cópias parciais. Para esses espelhos, você precisa apenas comparar o conteúdo que espera ter.

    
por 19.02.2018 / 14:19
1

O Git possui uma verificação de integridade ( git fsck ) que apontaria problemas genéricos com a estrutura de metadados do git. Há também um coletor de lixo ( git gc ) que remove coisas pendentes e outras coisas supérfluas.

Quanto à integridade dos dados ... basicamente esta é uma garantia fornecida pelo git, os dados que você coloca são os dados que você recebe. Se o git log (ou mesmo apenas o hash do último commit) for idêntico, então os dados serão iguais. Cada passo no git é checksummed, contra os dados, metadados e anterior; é como se fosse um blockchain, se os dados fossem alterados em qualquer lugar, então os checksums também. Se as somas de verificação não combinassem, o git reclamaria muito no checkout.

Há uma conversa antiga (2007-2008?) de Linus Torvalds sobre o git que você pode assistir no Youtube, onde o IIRC também fala sobre o lado da integridade dos dados. Há também alguma documentação aqui: link

Na prática, as pessoas simplesmente não se preocupam com isso, já que o mag magicamente cuida disso. Você acabou de fazer 'status git' para ver se você tem que puxar / empurrar / confirmar as alterações para acompanhar a origem.

O uso adicional de espaço também pode ter outras razões ... git stash pode ser um porco de espaço se você já o usou.

Este também é o lugar onde você tem diferenças em repositórios clonados: o git não se importa com o material local que nunca foi enviado. Se não for confirmado, não existe no que diz respeito aos clones.

    
por 21.10.2016 / 23:38

Tags