通过我们称之为点文件的隐藏文件集合自定义您的操作系统,这真是令人兴奋的事情。在Shell 点文件可以为您做什么中,H. "Waldo" Grunenwald 详细介绍了设置点文件的原因和方法。让我们深入探讨共享它们的原因和方法。
什么是点文件?
“点文件”是我们机器上所有配置文件的常用术语。这些文件通常以文件名开头的 . 开头,例如 .gitconfig,并且操作系统通常默认情况下会隐藏它们。例如,当我在 MacOS 上使用 ls -a 时,它会显示所有原本不会在输出中显示的可爱点文件。
dotfiles on master
➜ ls
README.md Rakefile bin misc profiles zsh-custom
dotfiles on master
➜ ls -a
. .gitignore .oh-my-zsh README.md zsh-custom
.. .gitmodules .tmux Rakefile
.gemrc .global_ignore .vimrc bin
.git .gvimrc .zlogin misc
.gitconfig .maid .zshrc profiles
如果我看一下其中一个,.gitconfig,我用它来 进行 Git 配置,我看到了大量的自定义设置。我有帐户信息、终端颜色首选项以及大量的别名,这些别名使我的命令行界面感觉像是我的。这是 [alias] 块中的一个片段
87 # Show the diff between the latest commit and the current state
88 d = !"git diff-index --quiet HEAD -- || clear; git --no-pager diff --patch-with-stat"
89
90 # `git di $number` shows the diff between the state `$number` revisions ago and the current state
91 di = !"d() { git diff --patch-with-stat HEAD~$1; }; git diff-index --quiet HEAD -- || clear; d"
92
93 # Pull in remote changes for the current repository and all its submodules
94 p = !"git pull; git submodule foreach git pull origin master"
95
96 # Checkout a pull request from origin (of a github repository)
97 pr = !"pr() { git fetch origin pull/$1/head:pr-$1; git checkout pr-$1; }; pr"
由于我的 .gitconfig 有超过 200 行的自定义设置,我没有兴趣在我使用的每台新计算机或系统上重写它,其他人也没有。这是共享点文件变得越来越流行的原因之一,尤其是在社交编码网站 GitHub 兴起之后。倡导共享点文件的经典文章是 Zach Holman 2008 年的 Dotfiles Are Meant to Be Forked。这个前提至今仍然适用:我想与自己、点文件新手以及那些通过分享他们的自定义设置教会我很多的人分享它们。
共享点文件
我们中的许多人拥有多个系统,或者知道硬盘是不可靠的,因此我们 想要备份我们精心策划的自定义设置。我们如何使这些出色的文件在不同环境中保持同步?
我最喜欢的答案是分布式版本控制,最好是能够为我处理繁重工作的服务。我经常使用 GitHub,并且随着经验的增长,我继续享受 GitLab。两者都是共享信息的完美场所。要进行设置
- 登录您首选的基于 Git 的服务。
- 创建一个名为“dotfiles”的存储库。(使其公开!分享是一种关怀。)
- 将其克隆到您的本地环境。*
- 将您的点文件复制到该文件夹中。
- 将它们符号链接(symlink)回其目标文件夹(通常是 $HOME)。
- 将它们推送到远程存储库。
* 您可能需要设置您的 Git 配置命令来克隆存储库。GitHub 和 GitLab 都会提示您要运行的命令。

上面的步骤 4 是这项工作的关键,可能有点棘手。无论您是使用脚本还是手动操作,工作流程都是从您的点文件文件夹符号链接到点文件目标,以便对您的点文件进行的任何更新都可以轻松推送到远程存储库。要对我的 .gitconfig 文件执行此操作,我将输入
$ cd dotfiles/
# Be sure to adjust the user to your user, which you can
# find in the path or by running the following:
$ echo $USER
mbbroberg
$ pwd
/Users/mbbroberg/Develop/dotfiles
# Be sure to use an absolute path
$ ln -nfs /Users/mbbroberg/Develop/.gitconfig /Users/mbbroberg/.gitconfig
添加到符号链接命令的标志提供了一些额外的好处
- -s 创建符号链接而不是硬链接
- -f 在发生错误时继续进行其他符号链接(此处不需要,但在循环中很有用)
- -n 避免符号链接符号链接(与 ln 其他版本的 -h 相同)
如果您想更深入地了解可用参数,您可以查看 IEEE 和 Open Group ln 规范以及 MacOS 10.14.3 上的版本。我不得不查找这些标志,因为我从别人的点文件中提取了它们。
您还可以使用一些额外的代码使更新更简单,例如我从 Brad Parbs 分叉的 Rakefile。或者,您可以像 Jeff Geerling 在 他的点文件中所做的那样,使其非常简单。他使用 这个 Ansible playbook 符号链接文件。此时保持一切同步很容易:您可以从您的点文件文件夹中进行 cron 作业或偶尔 git push。
题外话:什么不应该共享
在我们继续之前,值得注意的是,您不应该添加到共享点文件存储库中的内容——即使它以点开头。任何存在安全风险的东西,例如 .ssh/ 文件夹中的文件,都不是使用此方法共享的好选择。在将配置文件发布到网上之前,请务必仔细检查,并三重检查您的文件中是否没有 API 令牌。
我应该从哪里开始?
如果 Git 对您来说是新的,我的 关于术语的文章 和 我最常用的命令的速查表 应该可以帮助您入门。
还有其他令人难以置信的资源可以帮助您开始使用点文件。多年前,我偶然发现了 dotfiles.github.io,并且继续回到它,以便更广泛地了解人们正在做什么。其他人的点文件中隐藏着大量的部落知识。花时间浏览一些,并且不要羞于将它们添加到您自己的点文件中。
我希望这将帮助您开始享受在您的计算机上拥有一致的点文件的乐趣。
您最喜欢的点文件技巧是什么?添加评论或在 Twitter 上给我发推文 @mbbroberg。
7 条评论