不提交到 Git 也能使用 Nix Flake
原文由 Michael Lynch 于 发布,订阅该博客
如今在自己的仓库中工作时,我总是会往仓库里添加一个 Nix flake,这样只需一条命令就能在任何系统上启动可用的开发环境。
那如果是在别人的仓库里工作,而对方又不想引入 Nix flake,该怎么办呢?
通常情况下,我只会在本地的仓库副本中添加这个文件,并在本地将其加入 gitignore,这样就不会把这些个人专用的文件和其他改动一起提交了。
但 Nix flake 的问题在于,除非你执行 git add flake.nix 将其加入仓库,否则它无法正常工作。因此,我开始寻找一种既能保留自己的 flake.nix 文件,又不必提交到 Git 的方法。
方案一:创建一个外层的父目录
评论者 @kesor 提供了一个迄今为止我见过最简单的方案:创建一个父目录。
假设你在名为 examplerepo 的仓库上工作,目录结构可以这样组织:
.
├── examplerepo/ << The actual git repo
├── flake.lock
└── flake.nix这样一来,flake.nix 和 flake.lock 就位于 Git 仓库之外了。
然后,你在父目录下运行 nix develop,并在 ./examplerepo 文件夹中进行开发工作。
这个父目录本身不必是一个 Git 仓库,当然如果你想让它是,也可以。
方案二:让 Git 忽略这些改动
Silvan Mosberger 提供了这个解决方案:
git add --intent-to-add flake.nix flake.lock && \
git update-index --assume-unchanged flake.nix flake.lock这个方法并不完美,因为像 git reset 这样的命令会撤销它的效果,但它确实能有效地将 flake 文件从变更集中隐藏起来。
方案三:让 Nix 忽略 Git
Serhii Khoma 也展示了一种变通方法,可以让 Nix 忽略 Git 仓库:
nix develop path:.这种方式似乎比标准的基于 Git 的方式要稍慢一些。
然后,你可以用下面这条命令在本地忽略这些 flake 文件:
echo "flake.nix" >> .git/info/exclude && \
echo "flake.lock" >> .git/info/exclude这个方案比前面隐藏改动的方法更稳健,不过你得记住要使用一个和平常习惯不同的 nix develop 命令。
随机一篇博客
评论
登录后参与讨论