Git rastreando dotfiles que são ligados por links simbólicos

1

Eu mantenho meus dotfiles em um repositório privado no bitbucket e isso funciona muito bem para a maioria dos meus arquivos (.vimrc, .tmux.conf etc), então eu apenas configurei links simbólicos do meu diretório home para meu gitrepo clonado de dotfiles e tudo funciona muito bem.

Meu problema é que eu também uso o framework prezto para gerenciar plugins zsh. O Prezto faz algo semelhante, pois armazena todos os arquivos de configuração .zprezto * em seu próprio diretório e os simboliza para eles a partir de casa. Um desses arquivos é o .zshrc que ele armazena em seu próprio diretório.

Parece assim:

.zlogin -> /home/jordan/.zprezto/runcoms/zlogin
.zlogout -> /home/jordan/.zprezto/runcoms/zlogout
.zpreztorc -> /home/jordan/.zprezto/runcoms/zpreztorc
.zprofile -> /home/jordan/.zprezto/runcoms/zprofile
.zshenv -> /home/jordan/.zprezto/runcoms/zshenv
.zshrc -> /home/jordan/.zprezto/runcoms/zshrc

Como posso rastrear meu arquivo .zshrc no meu diretório git dotfiles sem quebrar o prezto.

    
por Jordan 13.09.2016 / 14:11

1 resposta

1

Você pode usar um link físico nesta instância, presumindo que não esteja ultrapassando os limites do sistema de arquivos. No caso de você não estar ciente, um hardlink é muito parecido com um link simbólico, mas a partir de uma perspectiva de processo, o arquivo é um arquivo normal. Isso inclui o git, que irá trabalhar corretamente com eles e arquivá-los como arquivos normais com conteúdo e não com links simbólicos.

Como o git não rastreia tais links, no entanto, se o arquivo for excluído e recriado pelo repositório por algum motivo, ele irá quebrar o hardlink, então é algo que deve ser observado ao usar o git.

Para ser claro, quero dizer que você cria um hardlink da instância armazenada primária do Pretzo para uma versão no diretório onde você guarda os arquivos dot com suporte do git. O Pretzo irá vê-lo como um arquivo regular, assim, git, e note que os arquivos com link físico podem ser ligados por links simbólicos, então sua implementação dessa maneira é adequada.

Como um link simbólico, isso significa que uma alteração em uma versão altera a outra, já que tecnicamente são os mesmos dados no armazenamento (com vários nós de arquivos associados). Cuidado com hardlinks são mais difíceis de perceber do que links simbólicos com muitas ferramentas, uma vez que eles geralmente não são indicados explicitamente (não sei como isso se aplica a vários arquivos GUI; acho que geralmente eles serão apenas arquivos regulares). No entanto, você pode identificá-los com base no número de links mostrados com ls -l (segunda coluna), stat , etc. Os arquivos normais que não são hardlinked têm uma contagem de links de 1 (e diretórios não / em> arquivos normais, portanto, sua contagem de links varia). Infelizmente, ao contrário dos symlinks, não existe uma maneira simples de encontrar os outros nós , apenas a contagem de links indicando que eles existem. Por isso, não comece a fazê-lo por vontade própria, faça-o sistematicamente, como neste contexto, para saber porquê e onde estão os outros nós.

Advertência

Isto significa que existe o potencial, se você está implantando desta maneira em múltiplos sistemas (seu post é ambíguo neste ponto), para se deparar com problemas se Prezto estiver propenso a fazer mudanças nestes arquivos por conta própria. Isso levará a situações em que um arquivo tem atualizações pendentes por meio de um pull , mas elas conflitam com as alterações locais feitas pelo Pretzo, e a fusão nesse ponto provavelmente é ruim, então você teria que decidir o que fazer (note que você pode excluir um hardlink e não apaga todas as outras cópias).

No entanto, se esses são todos os arquivos de configuração que você sabe que o Pretzo só lê e não estraga (o que é meio implícito na idéia de rastreá-los através dos sistemas), então você está bem. Além disso, se você está apenas usando este repositório como um backup de um sistema em particular, não importa, o cenário acima mencionado não pode acontecer.

O único outro problema é que você não pode usar hardlinks nos limites do sistema de arquivos. Ou seja, se a sua loja master git backed estiver em um sistema de arquivos montado separado da própria loja da Pretzo, você estará sem sorte com este método.

    
por 13.09.2016 / 14:52