通过我们称之为点文件的隐藏文件集合自定义您的操作系统,这真是令人兴奋的事情。在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 年发表的 点文件旨在被 Fork 这篇经典文章倡导共享点文件。这个前提至今仍然适用:我想与自己、点文件新手以及那些通过分享他们的自定义设置教会我很多东西的人分享它们。
共享点文件
我们中的许多人拥有多个系统,或者知道硬盘驱动器非常不可靠,以至于我们希望备份我们精心策划的自定义设置。我们如何在不同环境中保持这些精彩文件的同步?
我最喜欢的答案是分布式版本控制,最好是能够为我处理繁重工作的服务。我经常使用 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 Fork 的 Rakefile。或者,您可以像 Jeff Geerling 在他的点文件中那样,使其非常简单。他使用 此 Ansible playbook 符号链接文件。此时保持一切同步很容易:您可以从点文件文件夹中进行 cron 作业或偶尔 git push。
快速说明:不要分享什么
在我们继续之前,值得注意的是,您应该不添加到共享点文件存储库中的内容——即使它以点开头。任何有安全风险的东西,例如 .ssh/ 文件夹中的文件,都不适合使用此方法共享。在在线发布配置文件之前,请务必仔细检查您的配置文件,并三重检查您的文件中是否没有 API 令牌。
我应该从哪里开始?
如果 Git 对您来说是新手,我的关于术语的文章和 我最常用的命令的备忘单应该可以帮助您入门。
还有其他令人难以置信的资源可以帮助您开始使用点文件。多年前,我偶然发现了 dotfiles.github.io,并且仍然会回到它那里,以更广泛地了解人们正在做什么。其他人的点文件中隐藏着大量的部落知识。花时间滚动浏览一些,并且不要羞于将它们添加到您自己的点文件中。
我希望这将帮助您开始享受在您的计算机上拥有一致的点文件的乐趣。
您最喜欢的点文件技巧是什么?添加评论或在 Twitter 上给我发推文 @mbbroberg。
7 评论