我将我的点文件保存在 bitbucket 上的私有 git 存储库中,这对于我的大多数文件(.vimrc、.tmux.conf 等)非常有用,然后我只需设置从我的主目录到我克隆的点文件 gitrepo 的符号链接,一切正常伟大的。
我的问题是我还使用 prezto 框架来管理 zsh 插件。 Prezto 做了类似的事情,它将所有 .zprezto* 配置文件存储在自己的目录中,并从主目录到它们的符号链接。这些文件之一是 .zshrc,它存储在自己的目录中。
它看起来像这样:
.zlogin -> /home/jordan/.zprezto/runcoms/zlogin
.zlogout -> /home/jordan/.zprezto/runcoms/zlogout
.zpreztorc -> /home/jordan/.zprezto/runcoms/zpreztorc
.zprofile -> /home/jordan/.zprezto/runcoms/zprofile
.zshenv -> /home/jordan/.zprezto/runcoms/zshenv
.zshrc -> /home/jordan/.zprezto/runcoms/zshrc
我如何能够在我自己的 git dotfiles 目录中跟踪我的 .zshrc 文件而不破坏 prezto。
答案1
在这种情况下,您可以使用硬链接,前提是您没有跨越文件系统边界。如果您不知道,硬链接很像符号链接,但从进程的角度来看,该文件是普通文件。这包括 git,它将正确处理它们并将它们归档为包含内容而不是符号链接的普通文件。
因为 git 不跟踪此类链接,但是,如果文件因某种原因被存储库删除并重新创建,它将破坏硬链接,因此在使用 git 时需要注意这一点。
需要明确的是,我的意思是您创建一个从 Pretzo 的主存储实例到保存 git 支持的点文件的目录中的版本的硬链接。 Pretzo 会将其视为常规文件,git 也会将其视为常规文件,并注意硬链接文件可以进行符号链接,因此以这种方式进行部署是没问题的。
与符号链接一样,这意味着对一个版本的更改会更改另一个版本,因为从技术上讲,它们是存储上的相同数据(具有多个关联的文件节点)。请注意,硬链接比许多工具的符号链接更难注意到,因为它们通常没有明确指示(我不知道这如何适用于各种 GUI 文件浏览器;我认为通常它们只是常规文件)。但是,您可以根据ls -l
(第二列) 、等显示的链接数量来发现它们stat
。未硬链接的普通文件的链接计数为 1(并且目录是不是普通文件,因此它们的链接计数有所不同)。 不幸的是,与符号链接不同,没有简单的方法来查找其他节点,只是表明它们存在的链接计数。因此,不要随意开始执行此操作,而是像在这种情况下系统地执行此操作,以便您知道其他节点的原因和位置。
警告
这确实意味着,如果您以这种方式在多个系统上部署(您的帖子在这一点上不明确),则有可能遇到问题普雷斯托很容易自行更改这些文件。这将导致文件通过 a 等待更新,pull
但这些更新与 Pretzo 所做的本地更改相冲突,并且此时合并可能很糟糕,因此您必须决定要做什么(请注意,您可以删除硬链接,并且它不会删除所有其他副本)。
但是,如果您知道这些都是 Pretzo 只读取而不修改的配置文件(这有点隐含在 git 跨系统跟踪它们的想法中),那么您就可以了。另外,如果您只是使用此存储库作为一个特定系统的备份,那也没关系,上述情况不会发生。
唯一的另一个问题是您不能跨文件系统边界使用硬链接。也就是说,如果您的主 git 支持存储位于与 Pretzo 自己的存储分开的已安装文件系统上,那么您对这种方法不走运。
答案2
Prezto 这样做是为了帮助您跟踪您的 zsh 点文件。
~/.zprezto
是一个 git 存储库,因此您基本上是在维护一个分支。看这里:https://github.com/sorin-ionescu/prezto#updating