Use a Nix Flake without Adding it to Git

Michael Lynch

不加入 Git 也能使用 Nix Flake

原文由 Michael Lynch 發布,訂閱此部落格

現在只要是在我自己的儲存庫中工作,我一定會在專案中加入 Nix flake,這樣就能用一道指令在任何系統上啟動可用的開發環境。

但如果是在別人的儲存庫中工作,而對方又不想導入 Nix flake,那該怎麼辦?

一般情況下,我只會把檔案加到自己本機的儲存庫複本中,然後在本地端忽略,這樣就不會把個人專用的檔案跟其他修改一起提交。

但 Nix flake 的問題在於,除非你執行 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 指令。

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

留言