如何使用git跟踪主目录中的“点”配置文件?

时间:2015-08-05 19:58:08

标签: git configuration dotfiles repository-design

我的主目录中有许多“点”文件,我想用git跟踪 - 例如.pryrc.zshrc等。我想拥有这些文件的远程存储库,以便a)如果我因任何原因丢失机器,有一种简单的方法来恢复配置设置; b)在配置更改时我搞砸了一些事情,以便安全地跟踪对文件所做的任何更改。

我最初在主目录中设置了一个git存储库来跟踪它们,并将.gitignore文件配置为忽略除特定白名单文件名之外的所有文件。但是,我意识到我并不是因为在我的主目录中有一个git存储库而感到疯狂,而且在我的终端窗口中看到分支名称“master”也更加分散了注意力。我使用ZSH设置来在提示符中显示git分支,结果发现我在git存储库中导航到我不希望拥有存储库的目录时会感到惊讶和困惑。< / p>

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

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

2 个答案:

答案 0 :(得分:6)

这就是我弄清楚的:

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

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

# 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文件来记录目录的用途以及它的配置方式等等。我不希望这个文件在我的主文件夹中,它会脱离上下文。创建README后,我必须使用-f标志将其添加到存储库中:

git add -f README.md

我尝试将其添加到.gitignore白名单,但无法说服git找到包含路径变体的文件,例如!~/repositories/configurations/README.md等等。无论我如何尝试指定路径,git都没有看到该文件。虽然添加了力量,但它工作正常。比我聪明的人可能会建议如何做到这一点。

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

答案 1 :(得分:3)

查看Homesick,这是一个用于跟踪Git仓库中的dotfiles的框架。

它的工作原理是

  • 创建一个跟踪您想要管理的文件的Git仓库
  • sym-将您的主文件夹(~)中的文件链接到Git仓库
  • 提供跟踪新文件,提交/推/拉变更的命令

您可以通过运行

来安装它
gem install homesick

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

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

如果您想了解我是如何使用Homesick的,请link to my personal dotfiles repo

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

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