介绍
dotfiles指的是
.
开头的隐藏文件夹,一般是用户的配置或者软件信息。使用服务器或者Linux的时候,安装一些软件配置自己的使用环境是十分常见的场景。一个优秀的配置和各种软件不仅可以大幅提升工作效率,还可以美化工作环境,加强工作的动力。但是很多时候一个完整的配置是十分复杂且繁琐的,也难以去记忆每次配置时的信息。
因此很多人尝试收集配置文件,创建软连接,然后整理安装脚本,上传到github。实现难度较低。
这篇博客推荐使用基于Git的dotbot来管理dotfiles。自己编写管理脚本可能会导致脚本经常需要修改来使用不同的场合。框架在设计的时候会考虑到大部分场景,因此需要的修改和可能导致的错误较少。
Git子模块
在介绍 dotbot
之前需要了解一下
Git子模块(submodule)
的观念。当你的仓库依赖于别的仓库的时候,你可以添加一个链接指向被依赖的仓库的某个版本,而不需要去额外复制这些文件。
基本操作
添加子模块:
git submodule add <仓库地址> <子模块路径>
<仓库地址>是仓库的网络地址,<子模块路径>指的是相当于这个仓库的路径
示例:git submodule add https://github.com/example/library.git libs/library
初始化子模块,当你克隆具有子模块的仓库的时候,需要手动初始化并更新子模块:
git submodule init
git submodule update
也可以一次更新
git clone --recurse-submodules <仓库地址>
子模块管理,子模块可以像正常的仓库一样进行管理:
cd <子模块路径>
git pull
git add .
git commit -m "Update submodule"
git push
如果需要对子模块更新且不是子模块的作者的话,建议fork仓库作为子模块,fork仓库的管理此处不再阐述。
删除子模块,删除子模块需要调整 .gitmodules
和
.git/config
配置:
git submodule deinit <子模块路径>
git rm --cached <子模块路径>
rm -rf <子模块路径>
修改子模块url:
git submodule set-url <子模块路径> <新的URL>
修改子模块路径:
git mv <旧路径> <新路径>
git submodule sync
安装
首先你需要一个
dotfiles
文件夹(名字可以自定义),里面是你所有的配置文件。
之后进入这个文件夹,添加 dotbot
作为子模块:
# Initialize Repository
git init
git submodule add https://github.com/anishathalye/dotbot
cp dotbot/tools/git-submodule/install .
touch install.config.yaml
也推荐把需要安装的软件作为子模块使用
配置
通过修改 install.config.yaml
可以调整安装命令
./install
的工作。
默认的配置为:
- defaults:
link:
relink: true
- clean: ['~']
- link:
~/.bashrc: bashrc
~/.zshrc: zshrc
~/.vimrc: vimrc
- shell:
- [git submodule update --init --recursive, Installing submodules]
几个类别的顺序会影响命令执行时的顺序
主要类别有:
- defaults:会对所有操作进行的设置
- clean:哪些links会被检查是否dead,如果是dead links会被删除
- link:创建软链接的源目录和目标目录
- shell:希望运行的指令
之后就可以简单的使用git来管理dotfile,并且使用
./install
安装即可。