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:
- querendo que o Git quebre os links para que os repositórios clonados com
cp -a
sejam independentes -
proposto
core.keepHardLinks
(nunca integrado em algum Git lançado?) - uma pergunta semelhante a esta
- provavelmente outros…