如何在不將其加入 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.nix 和 flake.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 指令。
隨機一篇部落格