Se eu tenho um arquivo ou diretório que é um link simbólico e o comprometo em um repositório Git, o que acontece com ele?
Eu diria que ele deixa como um link simbólico até que o arquivo seja excluído e, se você retirar o arquivo de uma versão antiga, ele criará um arquivo normal.
O que faz quando eu excluo o arquivo que ele faz referência? Apenas confirma o link pendente?
git
version-control
symlink
Alex
fonte
fonte
.gitignore
vê o link simbólico como um arquivo, não uma pasta.../..
conforme necessário.git pull
criar um arquivo em vez de um link simbólico, tente executar o seu cliente Git como administrador.Respostas:
O Git apenas armazena o conteúdo do link (ou seja, o caminho do objeto do sistema de arquivos ao qual ele se vincula) em um 'blob', como faria em um arquivo normal. Em seguida, ele armazena o nome, o modo e o tipo (incluindo o fato de ser um link simbólico) no objeto em árvore que representa o diretório que o contém.
Quando você faz check-out de uma árvore que contém 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ê excluir o arquivo ao qual o link simbólico faz referência, ele não afetará 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.
fonte
core.symlinks
variável de configuração como false, e os links simbólicos serão verificados como pequenos arquivos de texto sem formatação que contêm o texto do link.symlinks = false
mexendo com elas.Você pode descobrir o que o Git faz com um arquivo, vendo o que ele faz quando o adiciona ao índice. O índice é como um pré-commit. Com o índice confirmado, você pode usar
git checkout
para trazer tudo o que estava no índice de volta ao diretório de trabalho. Então, o que o Git faz quando você adiciona um link simbólico ao índice?Para descobrir, primeiro, faça um link simbólico:
O Git ainda não sabe sobre esse arquivo.
git ls-files
permite inspecionar seu índice ( saída semelhante a-s
impressõesstat
):Agora, adicione o conteúdo do link simbólico ao armazenamento de objetos Git, adicionando-o ao índice. Quando você adiciona um arquivo ao índice, o Git armazena seu conteúdo no armazenamento de objetos Git.
Então, o que foi adicionado?
O hash é uma referência ao objeto compactado que foi criado no armazenamento de objetos Git. Você pode examinar esse objeto se procurar na
.git/objects/15/96f9db1b9610f238b78dd168ae33faa2dec15c
raiz do seu repositório. Este é o arquivo que o Git armazena no repositório, que você pode conferir posteriormente. Se você examinar esse arquivo, verá que ele é muito pequeno. Não armazena o conteúdo do arquivo vinculado.(Note
120000
é o modo listado nals-files
saída. Seria como100644
um arquivo normal.)Mas o que o Git faz com esse objeto quando você faz o check-out do repositório e do seu sistema de arquivos? Depende da
core.symlinks
configuração. Deman git-config
:Portanto, com um link simbólico no repositório, no check-out, você obtém um arquivo de texto com uma referência a um caminho completo do sistema de arquivos ou um link simbólico adequado, dependendo do valor da
core.symlinks
configuração.De qualquer forma, os dados referenciados pelo link simbólico não são armazenados no repositório.
fonte
Diretórios com links simbólicos:
É importante observar o que acontece quando há um diretório que é um link direto. Qualquer pull do Git com uma atualização remove o link e o torna um diretório normal. Isto é o que eu aprendi da maneira mais difícil. Algumas idéias aqui e aqui.
Exemplo
Antes
git add/commit/push
Depois
git pull
E algumas atualizações encontradasfonte