Como posso fazer o git commit dos arquivos em uma pasta ligada por links simbólicos

14

Eu tenho duas pastas:

  • /home/me/code/project/
  • /srv/www/projectfiles/

Na pasta /home/me/code/project , eu fiz o link simbólico static para /srv/www/projectfiles/

i.e. /home/me/code/project/static/ - > /srv/www/projectfiles/

Quando tento me comprometer agora, ele não vê nenhum dos arquivos por trás do symlink e, em vez disso, tenta confirmar o próprio link simbólico como um arquivo.

Como faço para confirmar um arquivo (por exemplo, /srv/www/projectfiles/style.css ) s que está por trás do link simbólico?

    
por Macha 11.08.2010 / 20:59

5 respostas

10

Uma solução alternativa seria fazer com que / srv / www / projectfiles fosse um link simbólico para / home / me / code / project / estático, assim o git não vê nenhum link simbólico

    
por 11.08.2010 / 21:05
2

Mova os arquivos para a pasta e remova o link simbólico. O Git não percorre links simbólicos.

Ele (e eu) assumiríamos que você está criando links simbólicos para um conjunto de arquivos que você não controla ou que não deseja modificar, portanto, eles não precisam ser versionados.

    
por 11.08.2010 / 21:04
1

Considere o uso de um ponto de montagem para montar a pasta de destino (a qual você irá ligar simbolicamente no momento) para aparecer no local desejado sob o projeto git. Eu usei essa abordagem com sucesso.

    
por 21.05.2015 / 16:35
1

Outra solução alternativa - a única que eu encontrei que funciona também para diretórios - é alterar a árvore de trabalho do git para as ações específicas.

git --work-tree=/home/me/code/project/ add /home/me/code/project/static/
git --work-tree=/home/me/code/project/ commit /home/me/code/project/static/
    
por 03.05.2016 / 12:15
0

Se você estiver usando o linux, eu particularmente gosto da solução fornecida por GitBLSR . É uma biblioteca que é carregada via LD_PRELOAD que transparentemente desreferencia links simbólicos para arquivos e pastas fora de um repositório.

Para instalá-lo para uma conta de usuário local é simples:

git clone https://github.com/Alcaro/GitBSLR.git
cd GitBSLR
./install.sh

Isso compilará a biblioteca e criará um alias como o seguinte em ~/.bashrc :

alias git="LD_PRELOAD=/path/to/gitbslr.so git"

O uso desse alias habilita a desreferência de links transparentes.

    
por 28.04.2018 / 16:48