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 모델을 사용해 번역했습니다.

댓글