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


16

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

Venho fazendo isso nas fotos que tirei para categorizá-las e indicar quais eu quero imprimir etc.

Estou usando o git para fazer backup de minhas imagens e parece que o git pensou que eram novos arquivos, pois o repositório cresceu cerca de 1 GB. O Git se sai muito bem na detecção de renomeação se eu não usar o git para renomear o arquivo, mas ele também lida com links físicos?

Walter


2
Todos os arquivos normais são links físicos. Talvez você quis dizer "arquivos com vários links físicos"?
Ignacio Vazquez-Abrams

Sim, foi isso que eu quis dizer.
25411 Walter

1
Corrija-me se estiver errado, mas não dá mais pistas content? Por que importaria se os arquivos tivessem o mesmo conteúdo, então - afinal, eles são tecnicamente o mesmo arquivo.
precisa saber é o seguinte

1
Para as pessoas que tropeçam nisso - talvez considere usar links simbólicos? stackoverflow.com/q/954560/492
CAD bloke

Parece que você deseja um sistema de arquivos baseado em tags.
Nayuki

Respostas:


14

A multiplicação de arquivos rastreados vinculados não fará com que o armazenamento de objetos do Git cresça muito, pois cada link será representado exatamente pelo mesmo objeto de 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á os arquivos da árvore de trabalho vinculados, rastreados e multiplicados sozinhos, se você não solicitar que ele faça algo que envolva a modificação do conteúdo nesses nomes de caminho ou a exclusão das entradas de diretório dos nomes de caminho. Porém, se você (por exemplo) fizer check-out de um commit ou branch antigo e voltar ao seu branch / commit normal e mais recente, o Git terminará "quebrando" os links físicos (substituindo os nomes de caminho afetados por novos (mas idênticos) ) em vez de recriar sua situação de multiplicação).

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

A idéia surgiu na lista de discussão do Git:


Para linux baseados em debian, existe a ferramenta hardlink ( packages.debian.org/search?keywords=hardlink ) que é capaz de executar esta operação de revinculação. infelizmente, não é muito rápido
Daniel Alder

Eu corro hardlinkcomo um trabalho noturno /var/lib/jenkins.
Amedee Van Gasse
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.