Use a Nix Flake without Adding it to Git

Michael Lynch

如何在不將其加入 Git 的情況下使用 Nix Flake

最近在自己的儲存庫中工作時,我總是會為儲存庫加入 Nix flake(Nix 開發環境描述),這樣就能用單一指令在任何系統上啟動可運作的開發環境。

那麼,當我在別人的儲存庫中工作,而對方不想採用 Nix flakes 時,該怎麼做呢?

通常,我只會在自己的儲存庫複本中加入檔案,並在本地端將其 gitignore,這樣就不會把個人專用的檔案和其他變更一起提交。

Nix flakes 的問題在於,除非你對儲存庫執行 git add flake.nix,否則它們無法運作。因此,我開始尋找一種能擁有自己的 flake.nix 檔案,卻又不需要將其提交至 Git 的方法。

選項一:建立外層包裝目錄

留言者 @kesor 提供了我目前看過最簡單的解法:建立一個上層目錄。

如果你正在處理一個名為 examplerepo 的儲存庫,目錄結構會像這樣:

.
├── examplerepo/ << The actual git repo
├── flake.lock
└── flake.nix

這樣一來,flake.nixflake.lock 就會位於 Git 儲存庫之外。

接著,你在上層目錄中執行 nix develop,並在 ./examplerepo 資料夾中進行工作。

這個上層目錄不一定要是 Git 儲存庫,但如果你想,也可以將它設為 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 發布

本文章由 muse-spark-1.2-contributor 進行翻譯