用户的应用程序配置通常存储在 dotfiles 里,如果你花了几个小时精心调整你的 vim 配置,那你肯定不想因为什么意外导致 ~/.vimrc 丢失,同时最好还能有一种方便的方法能让你在不同设备之间同步 ~/.vimrc。这种情况下,就可以考虑使用 git 管理 dotfiles。

优点

  1. 仅在 $HOME 里多创建一个目录,无需创建符号链接。
  2. 用版本控制系统管理 dotfiles,能清楚地知道之前修改配置文件的目的,回溯到先前的版本也很容易。
  3. 能将存储 dotfiles 的仓库托管在 GitHub 等平台,备份和迁移都很方便。
  4. git 应用广泛,你可能已经会一些基本的 git 操作(git addgit commitgit push),无需额外花时间学习某些工具来管理 dotfiles。如果你不会,花时间学习 git 也是值得的123

步骤

初始化

# 初始化 Git Bare Repository
git init --bare $HOME/.dot

# 创建 alias,方便执行操作
alias dot="git --git-dir=$HOME/.dot --work-tree=$HOME"

# 不显示工作区($HOME)未跟踪的文件
dot config --local status.showUntrackedFiles no

使用

# 添加 dotfile
dot add ~/.aliases
dot commit -m "add aliases"

# 配置远程仓库
dot remote add origin [email protected]:username/reponame.git

# 推送 commit 到远程仓库,同时将远程仓库与本地的 master 分支关联
# 关联以后,推送 commit 就只需要输入 dot push
dot push -u origin master

在新系统上恢复 Dotfiles

git clone --bare [email protected]:username/reponame.git $HOME/.dot
alias dot="git --git-dir=$HOME/.dot --work-tree=$HOME"
dot config --local status.showUntrackedFiles no

#这一步可能会提示 「error: The following untracked working tree files would be overwritten by checkout:」,按照 git 的说明移动或删除这些文件就行
dot checkout

其它方法

以下是我找到的其它方法,我并没有尝试过。

GNU stow

【譯】使用 GNU stow 管理你的點文件 - Farseerfc的小窩

yadm

TheLocehiliosan/yadm: Yet Another Dotfiles Manager

参考


  1. https://git-scm.com/book/zh/v2 ↩︎

  2. https://wiki.archlinux.org/index.php/Git_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87) ↩︎

  3. https://learngitbranching.js.org/ ↩︎