使用 Nix Flake 而不将其添加到 Git
如今在我自己的代码仓库中工作时,我总是在仓库中添加一个 Nix flake,这样我就可以在任何系统上用一条命令快速搭建起可用的开发环境。
那如果我在别人的仓库里工作,而对方又不想采用 Nix flake,该怎么办呢?
通常,我只需把文件添加到自己的仓库副本中,并在本地将其加入 gitignore,这样就不会把我的个人专属文件连同其他改动一起提交。
Nix flake 的问题在于,除非你把 flake.nix 用 git add 添加到仓库,否则它无法工作。于是,我寻找了一种既能使用自己的 flake.nix 文件、又不用把它提交到 Git 的方法。
方案一:创建一个外层父目录
评论者 @kesor 给出了我目前见过的最简单的解决方案:创建一个父目录。
假设你在开发一个名为 examplerepo 的仓库,你可以这样组织目录结构:
.
├── examplerepo/ << 实际的 git 仓库
├── 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 命令。
随机一篇博客