在我的主目录中有一些"点"文件,我想用git跟踪它们——例如.pryrc
, .zshrc
等。我想有一个远程存储库的这些文件,以便a)有一个简单的方法来恢复我的配置设置,如果我失去了我的机器出于任何原因;b)如果我在配置更改时搞砸了,可以安全地跟踪对文件所做的任何更改。
我最初在主目录中设置了一个git存储库来跟踪它们,并配置了一个.gitignore文件来忽略除特定的白名单文件名之外的所有文件。然而,我意识到我并不喜欢在我的主目录中有一个git存储库,而且在我的终端窗口中看到分支名称"master"也会使我分心。我使用带有设置的ZSH在提示符中显示git分支,当我在我不期望有存储库的目录中导航时,看到我在git存储库中,这是令人惊讶和困惑的。
我尝试在主文件夹下创建一个配置目录,将其初始化为git存储库,并生成指向所需文件的符号链接。然而,在添加并提交所有内容之后,我注意到远程分支只显示了链接,而不是文件的实际内容。
实现这一目标的最佳方法是什么?
我是这样想的:
首先,我创建了一个目录~/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
和提交。设置和推送到远程存储库是标准的。
注意-我决定我想要一个本地的自述文件。Md文件来记录目录的用途以及它是如何配置的等等。我不希望这个文件在我的主文件夹中,因为它会脱离上下文。在创建了README之后,我必须使用-f
标志将其添加到存储库中:
git add -f README.md
。
我试图将其添加到.gitignore
白名单中,但无法说服git找到具有路径变体的文件,例如!~/repositories/configurations/README.md
等等。不管我怎么指定路径,git都看不到这个文件。在用力添加之后,它工作得很好。比我聪明的人可能会有建议。
这个程序非常有效。我现在有了一个可用的存储库来跟踪点文件的更改并安全地远程存储它们。
查看Homesick,这是一个用于跟踪Git仓库中的dotfiles的框架。
- 创建一个Git repo来跟踪你想要它管理的文件
- 符号链接从你的主文件夹(
~
)到Git的repo - 提供跟踪新文件,提交/推/拉更改的命令
你可以通过运行
安装它gem install homesick
然后按照文档开始跟踪你的文件。
我建议使用像Homesick这样的工具,因为它被证明有效,而且是微创的。它不会用Git repo污染你的主文件夹,它允许你在任何机器上共享和恢复你的配置。
如果你想看看我是如何使用Homesick的,这里有一个链接到我的个人dotfiles repo。
Homesick是用Ruby构建的——如果你想要一个纯bash的解决方案,请查看Homesick。
关于管理dotfiles的可用解决方案的完整列表,请查看GitHub dotfiles页面。