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

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

Como posso garantir que, ao clonar, sincronizar e obter conteúdo de outro repositório git anexo, configurei um espelho idêntico?

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

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

Então, eu gostaria de ter uma verificação que possa executar.

Responder1

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

Quanto à integridade dos dados... basicamente esta é uma garantia fornecida pelo git, os dados que você insere são os dados que você retira. Se o git log(ou mesmo apenas o hash do último commit) for idêntico, os dados também serão. Cada etapa no git é somada em relação aos dados, metadados e anteriores; é como um blockchain, se os dados mudassem em algum lugar, as somas de verificação também mudariam. Se as somas de verificação não correspondessem, o git reclamaria muito na finalização da compra.

Há uma conversa antiga (2007-2008?) De Linus Torvalds sobre git que você pode assistir no Youtube, onde IIRC ele também fala sobre o lado da integridade dos dados. Há também alguma documentação aqui:https://git-scm.com/book/en/Git-Internals-Git-Objects

Na prática, as pessoas simplesmente não se preocupam com isso, já que o git cuida disso magicamente. Você apenas faz 'git status' para ver se precisa puxar/enviar/confirmar alterações para acompanhar a origem.

O uso adicional de espaço também pode ter outros motivos... git stashpode consumir muito espaço, se você já o usou.

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

Responder2

Verifiquei que o anexo git funciona conforme o esperado, fazendo o seguinte:

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

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

informação relacionada