name - publish git tag




Como o Git manipula links simbólicos? (2)

Nota do "editor": esta postagem pode conter informações desatualizadas. Por favor, veja comentários e esta questão sobre mudanças no Git desde 1.6.1.

Diretórios ligados a Symlink:

É importante observar o que acontece quando há um diretório que é um link flexível. Qualquer Git pull com uma atualização remove o link e o torna um diretório normal. Foi isso que aprendi de maneira difícil. Algumas percepções here e here.

Exemplo

Antes

 ls -l
 lrwxrwxrwx 1 admin adm   29 Sep 30 15:28 src/somedir -> /mnt/somedir

git add/commit/push

It remains the same

Após git pull e algumas atualizações encontradas

 drwxrwsr-x 2 admin adm 4096 Oct  2 05:54 src/somedir

Se eu tenho um arquivo ou diretório que é um link simbólico e eu o confirmo em um repositório Git, o que acontece com ele?

Eu suponho que ele deixa como um link simbólico até que o arquivo seja excluído e, em seguida, se você puxar o arquivo de volta de uma versão antiga, apenas cria um arquivo normal.

O que faz quando eu apago o arquivo que ele referencia? Isso apenas compromete o link pendente?


O Git apenas armazena o conteúdo do link (ou seja, o caminho do objeto do sistema de arquivos ao qual ele está vinculado) em um 'blob', assim como faria para um arquivo normal. Em seguida, ele armazena o nome, o modo e o tipo (incluindo o fato de que é um link simbólico) no objeto da árvore que representa seu diretório contido.

Quando você faz o checkout de uma árvore contendo o link, ele restaura o objeto como um link simbólico, independentemente de o objeto do sistema de arquivos de destino existir ou não.

Se você deletar o arquivo que o link simbólico referencia, ele não afetará de maneira alguma o link simbólico controlado pelo Git. Você terá uma referência pendente. Cabe ao usuário remover ou alterar o link para apontar para algo válido, se necessário.





symlink