以前部署新机器时都要把一堆配置文件 scp 过去,今天折腾了下用 Git 统一管理这些配置文件。

做起来很简单,创建一个 dotfiles 目录,把所有要同步的配置文件都放到这个目录下,并重命名去掉文件名开头的点,以免被 Git 忽略。写了一个脚本链接这些配置文件到 HOME 目录:

#!/usr/bin/env ruby

safe_mode = ARGV.include? '--safe'

files = %w(zshrc tmux.conf gitconfig vimrc emacs gitignore_global LS_COLORS)
files.each do |file|
  unless safe_mode and File.exists?("#{ENV['HOME']}/.#{file}")
    %x(ln -s -i -v $PWD/#{file} ~/.#{file})
    puts ".#{file} linked" if safe_mode
  end
end

为了方便同步脚本到 GitHub,我在 .zshrc 中定义了两个命令用来上传、下载最近的脚本配置:

alias pull-dotfiles='pushd $HOME/dotfiles && git pull origin master && ./link-files.rb --safe; popd'
alias push-dotfiles='pushd $HOME/dotfiles && git add -A && git commit -m "Update" && git push origin master; popd'

pull-dotfiles 可以获取最新的配置,push-dotfiles 则是提交最近的改动到 Git 服务器。我的配置文件在 https://github.com/zellux/dotfiles,希望对大家有用。