如何优雅地管理dotfile文件


dotfiles 简介

dotfiles是软件的配置文件,由于历史原因,通常以.开头,例如:.zshrc。很多程序的配置都是通过纯文本格式的被称作点文件的配置文件来完成的(之所以称为点文件,是因为它们的文件名以 . 开头,例如 ~/.vimrc。也正因为此,它们默认是隐藏文件,ls并不会显示它们)

dotfiles 通常位于根目录下,很多人也许花了一个上午,一天,甚至一个星期,折腾某某程序的配置文件。如果不小心丢失了,那心态一定会爆炸!所以,如何将这些文件备份,成了很多人必须要问的一个问题。如果直接用 git 管理整个根目录,那这个仓库会非常大。好在我们有软链接的方法,我们把配置文件统一放到一个文件夹中管理,然后在根目录用软链接的方式生成一个快捷键方式,这样访问根目录的 dotfile时,会自动打开那个文件夹中对应的dotfile。你可以理解为在根目录中创建一个快捷方式!

这样做的好处有:

  • 安装简单: 如果您登陆了一台新的设备,在这台设备上应用您的配置只需要几分钟的时间;
  • 可以执行: 您的工具在任何地方都以相同的配置工作
  • 同步: 在一处更新配置文件,可以同步到其他所有地方
  • 变更追踪: 您可能要在整个程序员生涯中持续维护这些配置文件,而对于长期项目而言,版本历史是非常重要的

软链接语法

命名格式如下:

ln [参数][源文件或目录][目标文件或目录]

建立软链接

以zsh的配置文件.zshrc为例

cd ~
mv .zshrc  ~/dotfiles/zshrc
ln -s ~/dotfiles/zshrc .zshrc

软链接相当于生成文件的快捷方式,当你访问 ~/.zshrc,实际上是在访问 ~/Users/l/dotfiles/zshrc 文件


现在你就可以在 dotfiles 中用 git 统一管理配置文件了

Github地址:My dotfiles

恢复配置文件

换了台电脑后,先从你的 Git 仓库中 clone 下配置文件,放到dotfiles中,然后重新建立一个软链接即可

git clone xxx 
rm -rf .zshrc # 如果原来有快捷方式了,就删掉它
ln -s ~/dotfiles/zshrc .zshrc

还原配置文件到根目录

先删掉根目录的软链接 rm -rf ~/.zshrc

然后用 mv ~/dotfiles/zshrc ~/.zshrc 命令即可

一些说明

(1)在 dotfiles 文件夹中,我统一把前面的点都去掉了,这样就不是隐藏文件

(2)利用shell脚本可以一次性转移所有的 dotfile 配置文件(请看dotfiles),但是我这里只是手动地把最重要的几个配置转移到了 dotfiles 文件中,用 git 统一管理
(3)用 ls -l ~/.zshrc 可以查看当前快捷方式链接的位置

删除软链接的正确方式:rm -rf ~/.zshrc (删掉那个快捷方式即可)

(4)在 Github 上可以搜到很多的 dotfiles 配置文件,看别人配置文件中的例子可以让你更快学会配置,例如,mathiasbynens/dotfiles (star数 23.6k)

更新:利用 rcm 管理 dotfiles 文件

项目地址:https://github.com/thoughtbot/rcm

今天看了视频 Linux下如何优雅的管理配置文件(干货) 和教程 用 rcm 管理隐藏文件 ,尝试了下用 shell 脚本管理 dotfiles 文件,用了后发现比自己手动设置方便多了。mkrc 命令会自动去掉配置文件前面的点,当用 rm -rf ~/.zshrc 删除快捷方式后,可以用 rcup 恢复(一次性恢复所有快捷方式)

  • mkrc ~/.zshrc 将.zshrc 转换为由 rcm 管理的隐藏文件
  • mkrc -t git .gitconfig 可以给配置文件加上标签,按类管理
  • 好处是用 rcup -t git 可以只还原 git 这个分类中的快捷方式
  • rcup 默认还原所有 lsrc 列出来的快捷方式
  • rcdn 默认删除所有 lsrc 列出来的快捷方式
  • 如果不想用 rcm 了,想还原配置文件到根目录,方法上文已介绍

效果图

说明:
lsrc 是默认列出所有.dotfiles第一目录下的所有文件的映射,因此加了 tag 的无法列出,但我们可以通过在根目录下配置 .rcrc 文件来显示出加了 tag 的配置文件的映射

使用vim .rcrc,打开.rcrc文件

  • TAGS 中加入想要显示的 tag 文件
  • EXCLUDES 中加入不想要显示文件映射的文件
    TAGS="rcm git"
    EXCLUDES="README.md commands.md"

    最后当你换了台 mac电脑,你只要 git clone 下dotfiles 仓库(Github地址:My dotfiles),先用 rcup -t rcm 还原.rcrc配置,然后用 rcuprcup -t xxx 还原快捷方式即可

参考资料

[1] https://github.com/mathiasbynens/dotfiles
[2] dotfiles 程序员的自我修养
[3] 懒程序员和他的 dotfiles
[4] MIT/Missing-semester/command-line讲义


Author: SHWEI
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source SHWEI !
评论
  TOC