Considerando que o Git não reconhece links simbólicos que apontam para fora do repositório, há algum problema em usar links físicos?
O Git poderia quebrá-los? Você pode me indicar informações detalhadas?
Considerando que o Git não reconhece links simbólicos que apontam para fora do repositório, há algum problema em usar links físicos?
O Git poderia quebrá-los? Você pode me indicar informações detalhadas?
Respostas:
O objeto 'tree', que representa os diretórios no Git, armazena o nome do arquivo e (subconjunto de) permissões. Ele não armazena o número do inode (ou outro tipo de id de arquivo). Portanto, os hard links não podem ser representados no git , pelo menos não sem ferramentas de terceiros, como metastore ou git-cache-meta (e não tenho certeza se isso é possível mesmo com essas ferramentas).
O Git tenta não mexer nos arquivos que não precisam ser atualizados, mas você deve levar em consideração que o git não tenta preservar os hardlinks, então eles podem ser quebrados pelo git.
Sobre links simbólicos apontando para fora do repositório : git não tem problemas com eles e deve preservar o conteúdo dos links simbólicos ... mas a utilidade de tais links é duvidosa para mim, já que se esses links simbólicos seriam quebrados ou não depende do layout do sistema de arquivos fora do repositório git , e não está sob controle do git.
Descobri que, usando ganchos, você pode capturar o git pull
evento (quando há algo para puxar ...) escrevendo o manipulador de eventos do script em um .git/hooks/post-merge
arquivo.
Primeiro, você tem que fazer chmod +x
isso.
Em seguida, coloque os ln
comandos dentro dele para recriar links físicos em cada pull. Legal hein!
Funciona, eu só precisava disso para o meu projeto e ls -i
mostra que os arquivos foram automaticamente vinculados depois pull
.
Meu exemplo de .git/hooks/post-merge
:
#!/bin/sh
ln -f $GIT_DIR/../apresentacao/apresentacao.pdf $GIT_DIR/../capa/apresentacao.pdf
ln -f $GIT_DIR/../avaliacoesMono/avaliacao_monografias_2011_Nilo.pdf $GIT_DIR/../capa/avaliacoes.pdf
ln -f $GIT_DIR/../posters/poster_Nilo_sci.pdf $GIT_DIR/../capa/poster.pdf
ln -f $GIT_DIR/../monografia/monografia_Nilo.pdf $GIT_DIR/../capa/monografia_Nilo.pdf
IMPORTANTE: Como você pode ver, o caminho para qualquer arquivo em seu repositório deve começar com e $GIT_DIR
, em seguida, adicione o caminho relativo parcial ao arquivo.
Também importante: -f
é necessário, porque você está recriando o arquivo de destino.
Deste problema de msysgit
Os pontos de junção não são links simbólicos; portanto, links simbólicos simplesmente não são suportados no msysGit.
Além disso, links físicos nunca foram rastreados pelo Git .
O problema era voltado para o Windows (já que se trata de msysgit) e o debate sobre o suporte potencial do link simbólico.
Mas o comentário sobre hard link diz respeito ao Git em geral.
Google 'git preserve hard links' e mostra que git não sabe como preservar a estrutura de hard link AFAIK, talvez por design.
Projetos da minha web usam links físicos da seguinte forma:
www/products/index.php
www/products/dell_latitude_id577/index.php #(hard linked to above)
www/products/dell_inspiron_id323/index.php #(hard linked again to above)
me@server:www/products$ ls -l index.php
-rwxr-xr-x 3 me me 1958 Aug 22 22:10 index.php*
Se eu quiser fazer alterações no index.php, eu o altero em um lugar e os links físicos (páginas de detalhes do produto) apontam para as alterações - exceto que o git não preserva esse relacionamento durante a clonagem e o pull em outros computadores.
me@server:www$ git pull
em outra máquina criará um novo index.php para cada link físico.
hardlink --ignore-time
sobre /var/lib/jenkins
, para recuperar algum espaço em disco. Durante o dia, alguns arquivos são desvinculados novamente depois git pull
ou, mvn compile
mas está tudo bem, espero que isso aconteça. Se o git preservasse os links físicos, minha estratégia de reciclagem de espaço em disco não funcionaria.