当前位置: 首页 > 工具软件 > dotfiles > 使用案例 >

利用 Git bare repo 版本控制配置文件 dotfiles

姬实
2023-12-01

简介

在 UNIX 操作系统中,我们通常会设置多种配置文件,以实现不同 CLI 工具定制化。对配置文件实现版本控制有利于实现历史回溯、远程备份、自动化部署等实用功能。

一个常规的配置文件版本控制逻辑是,我们单独为配置文件创建一个项目,再通过软链接对所有配置文件进行备份和统一管理。通过利用 Git 的 bare repo 功能,我们可以实现无项目文件依赖的版本控制,直接以 $HOME 作为根目录,轻松实现任意层级配置文件的跟踪和部署。

本地管理

1. 创建 bare repo

$HOME 路径下创建 bare repo:

$ git init --bare $HOME/.dotfiles

该命令会在 $HOME 目录下初始化一个用于版本控制 bare repo 的 Git 隐藏目录(.dotfiles),与我们平常所见到的 .git 功能一致。

2. 为 bare repo 创建 alias

在 Shell 配置文件(~/.bashrc~/.zshrc)中为当前 bare repo 创建 alias:

export dotfiles='git --git-dir $HOME/.dotfiles --work-tree $HOME'

该命令对 bare repo 进行配置,设置 .dotfiles$HOME 作为工作目录,后续配置文件可通过相对于$HOME的路径进行添加。

3. 默认不跟踪任何文件

$HOME 作为工作目录会导致 Git 默认可以跟踪 $HOME 下任意文件,而我们可以设置 Git 默认不跟踪任何文件:

$ dotfiles config --local status.showUntrackedFiles no

当我们需要跟踪某个配置文件时,再通过 dotfiles add 主动添加。

4. 使用示例

  • 查看 Git 跟踪状态
    $ dotfiles status
    
  • 添加和提交
    $ dotfiles add ...
    $ dotfiles commit -m ...
    
  • 同步到远程仓库
    $ dotfiles remote add origin <github-url>
    $ dotfiles push origin main
    

异地部署

1. 为 bare repo 创建 alias

在 alias 配置文件(~/.bashrc~/.zshrc)中为 bare repo 创建 alias:

export dotfiles='git --git-dir $HOME/.dotfiles.git/ --work-tree $HOME'

2. 忽略 ~/.dotfiles

$ echo ".dotfiles" >> 。gitigonre

防止在clone远程 repo 时出现无限递归问题。

3. 下载远程 repo

git clone --bare <github-url> $HOME/.dotfiles

4. 切换到远程配置

$ dotfiles checkout

⚠️ 注意:当本地已经存在与远程配置同类型的配置文件时,执行上述命令会报错,解决方式是删除或备份本地冲突文件。

 自动化备份一行流(不适用于嵌套目录):

mkdir .dotfiles.bak && dotfiles checkout 2>&1 | egrep "\s+\." | awk {'print $1'} | xargs -I {} mv {} .dotfiles.bak/{}

3. 默认不跟踪任何文件

$ dotfiles config --local status.showUntrackedFiles no

扩展

  • 通过创建alias使用lazygit打开bare repo:
    $ alias dotfile-lazy='lazygit --git-dir $HOME/.dotfiles.git/ --work-tree $HOM'
    
 类似资料: