dotfile

dotfile

unix/linux应用程序配置文件以点开头被成为dotfile。可以使用版本控制系统(git)来管理dotfile,以便跟踪更改并在不同主机之间同步dotfile。管理dotfile有多种方法(例如,直接在主目录中跟踪 dotfile,或者将它们存储在子目录中,然后使用shell脚本或专用工具进行符号链接/复制/生成文件)。

使用Git管理dotfile

直接使用 Git 管理 dotfiles 的好处是它只需要 Git 并且不涉及符号链接。缺点是 特定于主机的配置 通常需要将更改合并到多个 分支 中。

实现此方法最简单的方法是直接在主目录中初始化一个 Git 仓库,并使用 gitignore(5) 模式 * 默认忽略所有文件。然而,这种方法有两个缺点:当主目录中有其他 Git 仓库时,它可能会变得混乱(例如,如果你忘记初始化一个仓库,你突然就会操作你的 dotfiles 仓库),而且你无法再轻松地看到当前目录中有哪些未跟踪的文件(因为它们被忽略了)。

另一种没有这些缺点的方法是流行的“裸仓库和别名方法”,该方法在 Ask Hacker News: What do you use to manage your dotfiles? 上广为流传,只需三个命令即可设置。

1$ git init --bare ~/.dotfiles
2$ alias dotfiles='/usr/bin/git --git-dir="$HOME/.dotfiles/" --work-tree="$HOME"'
3$ dotfiles config status.showUntrackedFiles no

注意

通常,您的 dotfiles 都具有默认权限,但如果某些文件必须具有特定的文件权限,则应使用其他方法,因为 git 不存储权限。

您的 dotfiles 可以在新系统上像这样复制:

1$ git clone --bare <git-repo-url> $HOME/.dotfiles
2$ alias dotfiles='/usr/bin/git --git-dir="$HOME/.dotfiles/" --work-tree="$HOME"'
3$ dotfiles checkout
4$ dotfiles config --local status.showUntrackedFiles no
1$ dotfiles bundle create --progress dotfiles.bundle --all

bundle 可以像 <git-repo-url> 一样使用。

1$ git clone --bare dotfiles.bundle $HOME/.dotfiles
1$ dotfiles checkout
2error: The following untracked working tree files would be overwritten by checkout:
3    .bashrc
4    .gitignore
5Please move or remove them before you can switch branches.
6Aborting

您可以使用 $ dotfiles checkout -f 来重写已存在的文件,或者采取更安全的方法,使用以下脚本备份所有文件,然后使用 checkout。

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

然后,您可以使用创建的别名来管理您的 dotfiles。如果您正在使用 Bash 并希望为该别名获得 bash 补全,只需安装 bash-complete-aliasAUR,然后将别名和以下行添加到您的~/.bashrc文件中。

1$ complete -F _complete_alias dotfiles

在 bash 中获得补全的另一种方法是将以下内容添加到您的 ~/.bashrc 文件中:

1source /usr/share/bash-completion/completions/git
2__git_complete dotfiles __git_main

提示

为避免意外提交机密信息,请参阅 Git#Filtering confidential information。

https://wiki.archlinux.org.cn/title/Dotfiles