Use a Nix Flake without Adding it to Git

Michael Lynch

Gitに追加せずにNix Flakeを使う

原文は Michael Lynch により に公開されました。 このブログを購読する

最近は自分のリポジトリで作業する際は、常にリポジトリにNix flakeを追加するようにしています。そうすれば、どのシステムでもたった一つのコマンドで使える開発環境を立ち上げられるからです。

では、他人のリポジトリで作業していて、相手がNix flakeを導入したくない場合はどうすればよいのでしょうか。

通常であれば、自分の手元のコピーにファイルを追加して、個人的なファイルを他の変更と一緒にコミットしてしまわないようにローカルでgitignoreします。

Nix flakeの問題は、リポジトリでgit add flake.nixしなければ動作しないことです。そこで、Gitにコミットせずに自分用のflake.nixファイルを持つ方法を探しました。

選択肢1:ラッパーとなる親ディレクトリを作成する

コメント投稿者の@kesorさんが、これまで見た中で最もシンプルな解決策を提示してくれました。親ディレクトリを作成するというものです。

たとえばexamplerepoというリポジトリで作業している場合、ディレクトリ構成は次のようになります。

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

このようにすれば、flake.nixflake.lockをGitリポジトリの外に置くことができます。

あとは親ディレクトリでnix developを実行し、./examplerepoフォルダ内で作業を進めます。

親ディレクトリはGitリポジトリである必要はありませんが、必要であればそうしてもかまいません。

選択肢2:変更をGitから隠す

Silvan Mosbergerさんがこちらの解決策を提示しています。

git add --intent-to-add flake.nix flake.lock && \
  git update-index --assume-unchanged flake.nix flake.lock

git resetのようなコマンドで元に戻ってしまうため完璧ではありませんが、変更セットからflakeファイルを効果的に隠すことができます。

選択肢3: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」を使用して翻訳されました。

コメント