如何使用 git 跟踪主目录中的 "dot" 配置文件?

How do I track "dot" configuration files in my home directory with git?

我的主目录中有许多 "dot" 文件,我想使用 git 进行跟踪 - 例如.pryrc.zshrc 等。我想为这些文件创建一个远程存储库,以便 a) 如果我因任何原因丢失我的机器,有一种简单的方法可以恢复我的配置设置; b) 安全跟踪对文件所做的任何更改,以防万一我在配置更改时搞砸了。

我最初在主目录中设置了一个 git 存储库来跟踪它们,并配置了一个 .gitignore 文件来忽略除了特定的白名单文件名之外的所有文件。然而,我意识到我并不喜欢在我的主目录中有一个 git 存储库,而且在我的终端 window 中看到分支名称 "master" 也会让我分心。我使用带设置的 ZSH 在提示中显示 git 分支,结果令人惊讶和困惑的是看到我在 git 存储库中,同时在我不喜欢的目录中导航不希望有存储库。

我试图在主文件夹下创建一个配置目录,将其初始化为一个 git 存储库,并为所需文件生成 symlinks。但是,我注意到在添加并提交所有内容后,远程分支只显示了 link,而不是文件的实际内容。

实现此目标的最佳方法是什么?

我是这样想的:

首先,我创建了一个目录 ~/repositories/configurations/,用于存放 git 存储库。导航到该目录后,我 运行 git init 照常。

接下来,我创建了一个 .gitignore 文件,配置为忽略除白名单上的文件之外的所有文件。 (请注意,您可以稍后在提交之前的过程中执行此操作,但是如果您在设置 .gitignore 之前 运行 git status 您会看到很多未跟踪的文件)。

# ignore everything
*

# except these whitelisted files:
!.gitignore
!.pryrc
!.zshrc
!.bashrc
!.bash_profile
!.bash_login

然后将 git 存储库指向不同的工作目录:

git config core.worktree "/User/username"

运行 git status 现在显示:

Untracked files:
  (use "git add <file>..." to include in what will be committed)

  ../../.bash_login
  ../../.bash_profile
  ../../.bashrc
  ../../.gitignore
  ../../.pryrc
  ../../.zshrc

从这里开始,我们 git add ~/.bash_profile ~/.bashrc ~/.pryrc ~/.zshrc 并提交。设置并推送到远程存储库是标准操作。

请注意 - 我决定我想要一个本地 README.md 文件来记录目录的用途以及它的配置方式等。我不希望这个文件在我的主文件夹中断章取义。创建自述文件后,我不得不使用 -f 标志将其添加到存储库:

git add -f README.md

我试图将它添加到 .gitignore 白名单中,但无法说服 git 找到具有不同路径的文件,例如 !~/repositories/configurations/README.md 等等。无论我如何尝试指定路径 git 都没有看到该文件。不过,在用力添加后,它工作正常。比我聪明的人可能会建议如何做到这一点。

这个过程非常有效。我现在有一个工作存储库来跟踪点文件更改并安全地远程存储它们。

查看 Homesick,一个用于在 Git 存储库中跟踪点文件的框架。

它的工作原理是

  • 创建一个 Git 存储库来跟踪您希望它管理的文件
  • 将文件从您的主文件夹 (~) 符号链接到 Git 存储库
  • 提供跟踪新文件的命令,commit/push/pull 更改

可以通过运行

安装
gem install homesick

然后按照文档开始跟踪您的文件。

我建议使用像 Homesick 这样的东西,因为它被证明有效,而且是微创的。它不会用 Git 存储库污染您的主文件夹,并且它允许您在您可能正在使用的任何机器上共享和恢复您的配置。

如果你想看看我是如何使用 Homesick 的,这里有一个link to my personal dotfiles repo

Homesick 是使用 Ruby 构建的 - 如果您想要一个仅 Bash 的解决方案,请查看 Homeshick

有关管理点文件的可用解决方案的完整列表,请查看 GitHub dotfiles page