使用dotbot快速同步Linux配置

文章目录
  1. 1. 介绍
  2. 2. Git子模块
    1. 2.1. 基本操作
  3. 3. 安装
  4. 4. 配置
  5. 5. 参考资料

介绍

dotfiles指的是 .开头的隐藏文件夹,一般是用户的配置或者软件信息。使用服务器或者Linux的时候,安装一些软件配置自己的使用环境是十分常见的场景。一个优秀的配置和各种软件不仅可以大幅提升工作效率,还可以美化工作环境,加强工作的动力。但是很多时候一个完整的配置是十分复杂且繁琐的,也难以去记忆每次配置时的信息。

因此很多人尝试收集配置文件,创建软连接,然后整理安装脚本,上传到github。实现难度较低。

这篇博客推荐使用基于Git的dotbot来管理dotfiles。自己编写管理脚本可能会导致脚本经常需要修改来使用不同的场合。框架在设计的时候会考虑到大部分场景,因此需要的修改和可能导致的错误较少。

Git子模块

在介绍 dotbot之前需要了解一下 Git子模块(submodule)的观念。当你的仓库依赖于别的仓库的时候,你可以添加一个链接指向被依赖的仓库的某个版本,而不需要去额外复制这些文件。

基本操作

添加子模块:

1
git submodule add <仓库地址> <子模块路径>

<仓库地址>是仓库的网络地址,<子模块路径>指的是相当于这个仓库的路径

示例:git submodule add https://github.com/example/library.git libs/library

初始化子模块,当你克隆具有子模块的仓库的时候,需要手动初始化并更新子模块:

1
2
git submodule init
git submodule update

也可以一次更新

1
git clone --recurse-submodules <仓库地址>

子模块管理,子模块可以像正常的仓库一样进行管理:

1
2
3
4
5
cd <子模块路径>
git pull
git add .
git commit -m "Update submodule"
git push

如果需要对子模块更新且不是子模块的作者的话,建议fork仓库作为子模块,fork仓库的管理此处不再阐述。

删除子模块,删除子模块需要调整 .gitmodules.git/config配置:

1
2
3
git submodule deinit <子模块路径>
git rm --cached <子模块路径>
rm -rf <子模块路径>

修改子模块url:

1
git submodule set-url <子模块路径> <新的URL>

修改子模块路径:

1
2
git mv <旧路径> <新路径>
git submodule sync

安装

首先你需要一个 dotfiles文件夹(名字可以自定义),里面是你所有的配置文件。

之后进入这个文件夹,添加 dotbot作为子模块:

1
2
3
4
5
# 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的工作。

默认的配置为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
- 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安装即可。

参考资料

由于评论系统依托于Github的Discuss存在,因此默认评论者会收到所有通知。可以在邮件里点击"unsubscribe"停止接受,后续也可以点击下列仓库进行通知管理: bg51717/Hexo-Blogs-comments
Since the comment system relies on GitHub's Discussions feature, by default, commentators will receive all notifications. You can click "unsubscribe" in the email to stop receiving them, and you can also manage your notifications by clicking on the following repositories: bg51717/Hexo-Blogs-comments