Como manter “arquivos de ponto” sob controle de versão?

30
O

Etckeeper é uma ótima ferramenta para acompanhar as alterações em seus arquivos de configuração em /etc . Algumas coisas importantes sobre isso realmente se destacam. Pode ser usado com uma ampla variedade de VCSs: git, mercurial, darcs ou bzr. Ele também faz auto commits diariamente e sempre que você instalar, remover ou atualizar o pacote. Também controla as permissões de arquivo e os metadados de propriedade do usuário / grupo.

Eu também gostaria de manter meus "arquivos de ponto" em meu diretório home sob controle de versão também, de preferência bazar. Alguém sabe se existe uma ferramenta como o etckeeper para esse fim?

No pior dos casos, imagino que uma tarefa cron simples executando bzr add && bzr ci uma ou duas vezes por dia junto com a adição de ~/Documents , ~/Music , etc. ao .bzrignore Qualquer pessoa já está fazendo algo semelhante com um script?

Embora eu prefira o bazar, outras opções podem ser interessantes.

    
por andrewsomething 14.10.2010 / 02:09

8 respostas

7

Eu não sabia se havia algo que fizesse isso, então peguei um código para conseguir exatamente o que você quer usando meu repositório aqui: link

Eu tenho um arquivo que diz onde todos os arquivos pertencem e o programa generate_links apenas os coloca lá. Se você sabe o que está fazendo e pode compilar algum código do Haskell, é muito simples e fácil. Apesar de ser avisado que realmente foi feito para meu uso pessoal.

    
por Robert Massaioli 14.10.2010 / 04:38
3

Bem, fui em frente e fiz isso manualmente até encontrar uma solução melhor. Então, eu poderia explicar o que fiz.

Primeiro, eu fiz um bzr init ~ , mas a próxima coisa que fiz foi bzr ignore "*" . Eu decidi que não queria manter a coisa toda sob controle de versão. Simplesmente não valia a pena, especialmente quando você considera que há algumas coisas lá que você realmente não deveria manter em vcs como suas chaves. Então eu tive que bzr add dos arquivos específicos que eu queria. Você também pode adicionar exceções a .bzrignore . Expressões regulares do Python são úteis também. Eu estou mantendo isso bem magro por enquanto. Se tudo correr bem, posso adicionar todos os ~/.config e ~/.gconf também.

Também escrevi um script rápido que executo como cron job. Ele verifica se os arquivos foram alterados e, em caso afirmativo, um commit automático:

#! /bin/bash

set -e

TIME=$(date)
STATUS=$(bzr status)

if [ -n "$STATUS" ]; then
    if [ -n "$1" ]; then
         bzr ci ~ -m "$1"
    else
        bzr ci ~ -m "Automatic commit on $TIME"
    fi
fi

exit
    
por andrewsomething 15.10.2010 / 21:26
2

Transformei todo o meu diretório ~ em um repositório do Bazaar. Armazenar metadados não é um problema para arquivos no diretório inicial: tudo é de propriedade da mesma conta e grupo, e bzr já armazena o bit de execução.

Eu adiciono manualmente os arquivos "interessantes" a ele (eu não quero, por exemplo, minha coleção de músicas ou o cache do Firefox estar sob controle de versão), mas se você quiser automatizar isso com um script, eu acho que é o Uma solução simples de fazer bzr add && bzr ci nos diretórios selecionados ou na saída de um comando find apenas fará o trabalho.

    
por Riccardo Murri 14.10.2010 / 09:01
2

Eu mantenho meus arquivos zsh e vim no git, coloco no github, em diferentes repositórios:

para zsh, por exemplo, criei ".zsh" e coloquei zshrc e zshenv nele, além de um script para vincular zshrc a ~ / .zshrc e zshenv a ~ / .zshenv, algo assim.

while true
do
read -p "do you want to link zshenv to ~/.zshenv (Y/N)" yn
case $yn in
    [Yy]*) ln -s ~/.zsh/zshenv ~/.zshenv; break;;
    [Nn]*) break;;
    *) echo "please answer yes or no";;
esac
done

while true
do
read -p "do you want to link zshrc to ~/.zshrc (Y/N)" yn
case $yn in
    [Yy]*) ln -s ~/.zsh/zshrc ~/.zshrc; break;;
    [Nn]*) break;;
    *) echo "please answer yes or no";;
esac
done

então eu faço

git clone git://[email protected]:tshirtman/.zsh
cd .zsh
./init.sh

para .vim, é quase o mesmo, exceto que eu uso submódulos para plugins, com pathogen, então eu adicionei isso no init.sh

git submodule init
git submodule update

e quando eu quero adicionar um plugin vim, eu faço

git submodule add git://github.com/nathanaelkane/vim-indent-guides.git bundle/vim-indent-guides

por exemplo.

ok, seria necessário muito trabalho se você tiver mais do que alguns pontos diretivos que deseja gerenciar, mas nada impede que você coloque todos no mesmo diretório ou separados por atividades (para todos os editores gráficos , um para atividades na web ...) ou mais. de qualquer forma, foi o que eu fiz, então apenas meus dois centavos:).

    
por tshirtman 28.01.2012 / 20:51
1

Eu uso uma solução que não é automática como o etckeeper (tenho que manualmente confirmar), mas funcionou bem para mim. Não é tão desenvolvido quanto eu gosto, mas funciona.

Eu escrevi meu próprio utilitário que é semelhante a GNU Stow , como armazenado não fiz tudo o que eu queria. Eu chamo de Stow in Home . Quando executado, ele procura por um diretório chamado "HOME". Em seguida, ele pega tudo sob esse diretório e o vincula à localização correspondente em $ HOME, criando diretórios conforme necessário. Ele também irá traduzir nomes de arquivos - se um arquivo começar com um '_', ele será substituído por um '.'. Eu fiz isso porque é melhor para editar meus arquivos de ponto quando eles não estão ocultos (veja-os nas listas de diretórios por padrão). Então, ele os colocaria no nome que o aplicativo espera.

Então, eu tenho vários repositórios git para minha configuração. Eu só coloco arquivos de ponto que eu pessoalmente edito neles. A vantagem disso é que eu posso ter um repositório para arquivos dot que eu possa compartilhar com outros (como minha configuração do Emacs) e um para outros que são privados (digamos, minha configuração ssh, com hostnames e tal para o trabalho). O symlinking coloca com stow-in-home coloca tudo no lugar certo, mas o controle de origem para cada um pode ser separado.

Funcionou bem para mim. Não há realmente nenhuma razão para eu não ter configurado algo para fazer commits automaticamente. Ou mova todos os arquivos de ponto para os repositórios apropriados e ainda use o armazenamento em casa. Mas é assim que eu fiz as coisas.

    
por Travis B. Hartwell 18.10.2010 / 00:10
0

Você não pode adicionar o dot files ao repositório usado no Etckeeper?

    
por txwikinger 14.10.2010 / 03:12
0

Eu fiz isso copiando todos os meus dotfiles que eu gostaria de manter sob controle de origem para uma pasta chamada "dotfiles" no meu diretório / home /. É claro que isso significa manter duplicatas e copiar para frente e para trás quando necessário, mas acho que essa é a solução mais fácil para mim.

    
por Derek 14.10.2010 / 04:40
0

Eu mantenho meus arquivos em um subdiretório e faço links simbólicos. Eu tenho um script que automatiza isso. Você pode verificar tudo no link

    
por Sam King 11.06.2012 / 04:34