git hard links - sabe que um arquivo é um hard link?

12

Comecei a usar links físicos em vez de links simbólicos para organizar arquivos ...

Eu venho fazendo isso por fotos que eu tiro para categorizá-las, além de indicar quais eu quero imprimir, etc.

Estou usando o git para fazer backup de minhas imagens e parece que o git achou que elas eram novos arquivos, já que o repositório cresceu cerca de 1 GB. O Git faz muito bem em detectar renomeações se eu não usar o git para renomear o arquivo, mas ele também lida com hard links?

Walter

    
por Walter 24.04.2011 / 23:17

1 resposta

12

Multiplicar os arquivos rastreados vinculados não aumentará muito o armazenamento de objetos do Git, pois cada link será representado pelo mesmo objeto blob. Sua árvore de trabalho, no entanto, pode acabar crescendo devido a links quebrados.

O Git não rastreia se os arquivos da árvore de trabalho rastreados são links físicos para o mesmo arquivo.

O Git deixará vários arquivos de árvore de trabalho vinculados, acompanhados e rastreados, se você não pedir que ele faça qualquer coisa que envolva modificar o conteúdo nesses nomes de caminho ou excluir as entradas de diretório dos nomes de caminho. Mas, se você (p.ex. fizer check-out de um commit ou branch antigo e depois voltar para o seu branch / commit normal e mais recente, o Git acabará “quebrando” os links físicos (substituindo os nomes de caminho afetados por novos (mas idênticos) ) arquivos em vez de recriar sua situação multi-link).

Para recuperar seu status de multiplicação vinculada, você pode escrever um programa para procurar arquivos idênticos e vinculá-los novamente a qualquer um dos arquivos. Essa operação de “religação” pode ser mais complicada se todos os links não estiverem na própria árvore de trabalho ou, pelo menos, não em algum local “externo” facilmente identificável (ou seja, provavelmente será difícil recuperar os links se você estiver conectando Arquivos "aleatórios" de todo o seu diretório home em um repositório de "backup" e usando o Git para modificar a árvore de trabalho).

A ideia surgiu na lista de discussão do Git:

por 25.04.2011 / 03:53

Tags