文章目录
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配置文件(如.zshrc文件)
项目地址: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配置,然后用 rcup
或 rcup -t xxx
还原快捷方式即可
更新:利用ln -s手动管理非dotfiles配置文件(如json文件)
rcm 生成的快捷键方式都是 .开头的,例如你一开始的文件是 fpx.txt
,你用 mkrc ~/fpx.txt
,他会 fpx.txt
源文件放到 .dotfile
文件夹内,然后在~
生成一个 .fpx.txt
快捷方式。
例如,我想备份桌面上的 ssh.log 文件,结果 rcm 给我生成了一个 .Desktop/ssh.log
快捷方式,这并不是我想要的啊
所以说如果你想保存的是VScode xxx.json
配置文件,用rcm 不一定能保证 VScode 能加载 .xxx.json
,所以应该还是用手动添加的方式比较好
解决方法
默认情况下,因为 rcm 的存在,只要你把文件手动放到 .dotfiles 文件夹中,就会有一个快捷键映射,虽然快捷键方式它没有生成,但是当你用 rcup
是就会还原所有 lsrc 中显示的快捷键映射的快捷方式了。
所以最好的方法是在 .dotfiles 中单独创建一个 NotRcmFiles 来管理不是点开头的配置文件,然后在 ~/.rcrc
中排除这个文件夹
再通过手动建立软链接的方法,来管理非点开头的配置文件(如 VScode 的 json 配置文件)
手动建立软链接示例
mv '/Users/macos/Library/Application Support/Code/User/settings.json' ~/.dotfiles/NotRcmFiles/VScode_settings.json
ln -s ~/.dotfiles/NotRcmFiles/VScode_settings.json '/Users/macos/Library/Application Support/Code/User/settings.json'
至此 VScode 的 json 配置文件也被我管理起来了
不推荐用硬链接来保存 dotfiles 配置文件,因为硬链接无法跨文件系统(如/usr/local 和 /home 就是不同的文件系统),容易出现问题。
补充:ln -s 文件夹 文件夹链接
ln -s 也是可以链接整个文件夹的
示例:
参考资料
[1] https://github.com/mathiasbynens/dotfiles
[2] dotfiles 程序员的自我修养
[3] 懒程序员和他的 dotfiles
[4] MIT/Missing-semester/command-line讲义