管理dotfiles是一件没那么容易的事。dotfiles是指一些软件的配置文件,文件名以.开头或者在以.开头的目录下,从而能在*nix系统下隐藏,譬如.zshrc,或者.config/nvim/init.vim。一个好的管理方案,应该满足以下需求:

  1. 易于版本控制。使用一个repo管理多个软件的dotfiles,repo中维护的dotfiles跟实际的dotfiles保持同步或者能通过简单步骤保持同步。
  2. 易于安装。在你更换设备后,克隆repo后能经过简单步骤将你维护的dotfiles恢复到指定的位置。

dotfiles.github.io汇编了主流的dotfiles管理方案,包括使用编写脚本将dotfiles从repo中同步到对应的位置,或者使用工具生成软链等。本文所介绍的方法也收录在其中,见manage dotfiles using a Git bare repository。和其他的方案相比,该方案的亮点有:

  • 零依赖(当然,它依赖git…)
  • 学习成本低。你要做的就是新建一个git repo,然后添加一个alias方便日常使用。
  • 易于维护。你
  • 易于迁移。你可以快速使用本方案进行dotfiles的管理。

tl;dr

  • 初始化
git init --bare ~/.cfg
echo "alias config='/usr/bin/git --git-dir=$HOME/.cfg/ --work-tree=$HOME'" >> $HOME/.zshrc && source ~/.zshrc
config config --local status.showUntrackedFiles no
  • 安装
echo ".cfg" >> ~/.gitignore
  • git init --bare $HOME/.cfg

初始化

  1. 使用git init --bare 新建一个repo。
git init --bare ~/.cfg

通常新建仓库的命令是git init repo-name,或者以当前目录为

git init --bare $HOME/.cfg  
alias config\='/usr/bin/git --git-dir=$HOME/.cfg/ --work-tree=$HOME'  
config config \--local status.showUntrackedFiles no  
echo "alias config='/usr/bin/git --git-dir=$HOME/.cfg/ --work-tree=$HOME'" >> $HOME/.bashrc

Using

config status  
config add .vimrc  
config commit -m "Add vimrc"  
config add .bashrc  
config commit -m "Add bashrc"  
config push

Migration

alias config='/usr/bin/git --git-dir=$HOME/.cfg/ --work-tree=$HOME'

Refs