Use a Nix Flake without Adding it to Git

Michael Lynch

使用 Nix Flake 而不将其添加到 Git

如今在我自己的代码仓库中工作时,我总是在仓库中添加一个 Nix flake,这样我就可以在任何系统上用一条命令快速搭建起可用的开发环境。

那如果我在别人的仓库里工作,而对方又不想采用 Nix flake,该怎么办呢?

通常,我只需把文件添加到自己的仓库副本中,并在本地将其加入 gitignore,这样就不会把我的个人专属文件连同其他改动一起提交。

Nix flake 的问题在于,除非你把 flake.nixgit add 添加到仓库,否则它无法工作。于是,我寻找了一种既能使用自己的 flake.nix 文件、又不用把它提交到 Git 的方法。

方案一:创建一个外层父目录

评论者 @kesor 给出了我目前见过的最简单的解决方案:创建一个父目录。

假设你在开发一个名为 examplerepo 的仓库,你可以这样组织目录结构:

.
├── examplerepo/ << 实际的 git 仓库
├── flake.lock
└── flake.nix

这样,flake.nixflake.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 命令。

原文由 Michael Lynch 发布

本文章由 stealth/ox-alpha 进行翻译