Como devo controlar a versão do meu perfil do bash?


10

Portanto, estou muito confortável com o controle de versão e pensei em começar a rastrear versões do meu perfil do bash: ~/.bash_profilecom o benefício adicional de poder compartilhar meus vários aliases e outros no GitHub.

Supondo que meu arquivo .bash_profile precise permanecer no meu diretório pessoal (não consigo agrupá-lo em um diretório para acompanhá-lo sozinho como um arquivo normal), qual seria a melhor maneira de fazer isso? Não quero inicializar um repositório git no meu diretório pessoal e preciso ignorar todos os outros arquivos presentes.

Então, o que pode ser uma boa solução?

Suponho que eu poderia simplesmente fazer uma cópia dele em um diretório separado e atualizá-lo / confirmar periodicamente, mas estou curioso para saber se existe uma boa maneira de controlar a versão de um único arquivo em um diretório preenchido?


8
Links simbólicos são seus amigos.
Blrfl 25/02

Respostas:


10

No entanto, normalmente existem duas maneiras de fazer isso: a) link simbólico b) script de sincronização. Nos dois casos, é necessário criar outro repositório (nomeie-o dotfileabaixo) para bash_profileser controlado por versão.

Use links simbólicos

bash_profileé movido para o diretório controlado por versão (contendo .git), $HOME/.bash_profileé um link simples soft $HOME/dotfile/bash_profile.

$HOME/dotfile/bash_profileé onde bash_profilereside o seu real , veja holman dotfile como um exemplo.

Usar script de sincronização

bash_profilepermanece no seu HOMEdiretório, mas é apenas uma cópia do 'mais recente'. O mais recente bash_profileainda vive $HOME/dotfile.

Sim, é uma abordagem de copiar e colar, é por isso que você precisa de algumas syncing scriptpara salvá-lo do trabalho DRY . veja mathiasbynens dotfiles como um bom exemplo. Seu syncing script https://github.com/mathiasbynens/dotfiles/blob/master/bootstrap.sh .

além disso

Como você suspeita:

Estou curioso para saber se existe uma boa maneira de controlar a versão de um único arquivo em um diretório preenchido

A versão que controla um único arquivo não faz muito sentido, copie e cole ou simplesmente solte-o em algumas unidades de nuvem, economizando muito trabalho.

O ponto real é que as coisas não são escalados Desta forma, quando a dotfilessua $HOMEcresce, quando você quer controle de versão o seu favorito de configuração do editor de texto (digamos vimrc), quando você usa SSHpara trabalhar com vários shell remotamente, você pode ter zshrc, bashrc, fishrcetc.

Isso significa que, a longo prazo, você pode querer controlar a versão de todos os seus dotfiles. O arquivo de pontos do Github é um bom ponto de partida.


1
Não tinha ouvido falar de links simbólicos antes! Era exatamente o que eu estava procurando. Obrigado!
Elliotwhitehead

Obrigado pela resposta muito útil. Muitas outras boas idéias para colocar este e outros dotfiles em um repo pode ser encontrada aqui: dotfiles.github.io
kevinmicke

@kevinmicke Fico feliz que ajuda :)
Xlee

2

Não quero inicializar um repositório git no meu diretório pessoal e preciso ignorar todos os outros arquivos presentes.

Por que não? Você deseja rastrear um arquivo em seu diretório pessoal, portanto, seu diretório pessoal também deve estar sob controle de versão.

Isso não significa que seu diretório pessoal precise ser um repositório git. Deixe-me explicar:

Os repositórios git consistem em duas partes: uma árvore de trabalho (a menos que seja um repositório simples, é claro) e o .gitdiretório "database". Normalmente, o posterior é apenas um subdiretório (oculto) do anterior, mas isso não é estritamente necessário. O git suporta o uso de uma árvore de trabalho desanexada . Assim, você pode manter seu diretório pessoal sob controle de versão, mas não precisa que ele contenha um .gitdiretório que possa confundir ferramentas (vim, emacs, ...) ou o próprio git.

Configurando:

cd ~
mkdir .dotfiles
cd .dotfiles
git init .

Agora há um ~/.dotfiles/.gitdiretório. Use isso, mas especifique o diretório inicial como árvore de trabalho. Isso requer uma linha de comando bastante longa, portanto, um alias é uma boa idéia:

alias dotfiles='git --git-dir ~/.dotfiles/.git --work-tree=$HOME'

Para usá-lo, use o apelido acima em vez de git, por exemplo dotfiles status.

Benefícios:

  • nenhuma outra ferramenta necessária, apenas git
  • não é possível criar situações simbólicas ou fora de sincronismo
  • Os repositórios git nos subdiretórios abaixo de home não são afetados de forma alguma

Eu peguei isso neste post do blog (que tem algumas informações adicionais) e estou usando sem problemas. Eu não, mas com uma linha simples *em .gitignoreque você pode se livrar do possivelmente enorme quantidade de arquivos untracked e proteger-se um pouco contra a adição de arquivos ao repositório que não são destinadas a ser adicionado.


Bom ponto! Além disso, talvez seja necessário redefinir alguns alias existentes do git *, eu acho.
Xlee

1

Outra solução seria deportar sua configuração específica (como definir seus próprios aliases ou definir suas próprias funções) para um arquivo diferente de .bash_profile. Dessa forma, somente sua configuração específica será versionada e você somente precisará obtê-la da sua .bash_profile.

Faça manualmente

Digamos que esse .bash_profilearquivo de extensão seja nomeado bash_profile_exte contido no /path/to/bash/profile/ext/diretório:

No final do seu .bash_profilearquivo, você terá:

source /path/to/bash/profile/ext/bash_profile_ext

E somente seu /path/to/bash/profile/extdiretório será versionado.

Faça isso usando um aplicativo de terceiros

Ainda mais simples (eu acho :-)), estou desenvolvendo shprofile que ajuda você a gerenciar seu perfil de shell, concentrando-se apenas na sua configuração de perfil específica. O shprofile permite definir toda a sua configuração de perfil específica em um único diretório, que pode ser versionado. Observe que você também pode gerenciar vários perfis para o mesmo usuário.

Novamente, não há necessidade de versão toda sua .bash_profileconfiguração, mas apenas seus valores adicionados.


0

Para gerenciamento de configuração de TI em nível empresarial, muitos estão usando o Puppet. Eu recomendo o Puppet aos clientes como uma medida de contenção de custos e confiabilidade. Aqui no laboratório, mantemos as coisas simples.

Nosso repositório principal contém arquivos necessários para reconstruir completamente um sistema com falha ou criar uma nova conta de usuário, e o controle de versão foi útil em várias ocasiões. O Git funciona bem com arquivos e diretórios que começam com um período, desde que o git não esteja configurado para ignorá-los.

Esses são os caminhos do repositório para instalação e configuração do sistema e aplicativo.

knowledge.resources / install.linux / std.fedora.dnf.sh (instalações dnf) conhecimento.resources / install.linux / font.install.info.te (instalação de fontes) te (outra instalação e configuração)

Esses são arquivos de configuração geral do usuário.

startup / linux.basic.user / .bash_profile startup / linux.basic.user / .bashrc startup / linux.basic.user / .vimrc startup / linux.basic.user / .gitmessage startup / linux.basic.user / .gitconfig startup / linux.basic.user / use.ls.al.to.see.dot.files.here

Estes são para contas remotas em servidores.

startup / linux.remote / .bash_profile startup / linux.remote / .bashrc startup / linux.remote / .vimrc startup / linux.remote / .gitmessage startup / linux.remote / .gitconfig startup / linux.remote / use.ls. al.to.see.dot.files.here

Estes são para a conta raiz.

startup / linux.root / .bash_profile startup / linux.root / .bashrc startup / linux.root / .vimrc startup / linux.root / use.ls.al.to.see.dot.files.here

Eu uso arquivos de tamanho zero chamados use.ls.al.to.see.dot.files.here para me lembrar que o diretório apenas parece vazio.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.