DVC 프로젝트 초기화
DVC 프로젝트 초기화 (dvc init)
DVC 프로젝트를 시작하는 첫 명령이 dvc init이에요. 지정한 디렉터리에서 DVC 프로젝트를 초기화하며, 기본적으로는 현재 작업 디렉터리가 대상이에요. DVC는 Git 저장소에서 가장 잘 동작하도록 설계됐기 때문에, 플래그 없이 실행하면 Git 저장소 루트(.git/ 디렉터리)에서 실행하기를 기대해요.
출처: dvc init
사용법
usage: dvc init [-h] [-q | -v] [--no-scm] [-f] [--subdir] [directory]
초기화 시 생성되는 것
DVC 초기화 시 .dvc/ 디렉터리가 만들어져요. 여기에 설정·기본 캐시 위치·그 외 내부 파일이 담기고, 사용자에게는 숨겨져 있어요. 이 디렉터리는 git add로 자동 스테이징되기 때문에 Git에 쉽게 커밋할 수 있어요.
$ cat .dvc/.gitignore
/config.local
/tmp
/cache
캐시 디렉터리는 비롯해 데이터·모델 파일을 담게 되므로 Git에 추적되지 않고 DVC가 관리해요.
주요 옵션
--subdir: Git 저장소 루트가 아닌 하위 디렉터리에서 DVC 프로젝트를 초기화해요. 모노레포나 중첩 DVC 프로젝트에 유용해요.--no-scm: Git과 분리된 채로 DVC 프로젝트를 초기화해요. 버전 관리 시스템이 Git이 아니거나, 단순한 프로젝트, 배포 자동화 같은 경우에 써요.-f,--force: 기존.dvc/를 제거하고 초기화해요. 이전dvc init이 손상됐을 때 유용해요.[directory]: 지정하면 그 위치에 저장소를 초기화하고, 디렉터리가 없으면 새로 만들어요.
하위 디렉터리 초기화 (--subdir)
--subdir은 Git 저장소의 하위 디렉터리에서 DVC를 초기화할 때 필요해요. DVC는 여전히 시스템 루트까지 Git 루트(.git/)를 찾으려 하죠. 이 옵션은 설정 파일에 영향을 주지 않고 .dvc/ 디렉터리를 기본 모드와 동일하게 생성해요. 이렇게 하면 하나의 Git 저장소에 여러 DVC 프로젝트를 만들어 서로 격리할 수 있어요.
$ mkdir mygitrepo && cd mygitrepo
$ git init
$ mkdir project-a && cd project-a
$ dvc init --subdir
왜 유용한가요
- 저장소 관리자가 최상위
.dvc/디렉터리를 원하지 않거나, 이미 여러 서브프로젝트가 DVC를 쓰고 있는 모노레포일 때. - 설정·캐시 디렉터리·원격 스토리지가 여러 하위 디렉터리에서 공유되는 문제를 막을 때.
dvc pull·dvc repro같은 명령이 기본적으로 저장소 전체를 탐색하는데, 큰 모노레포에선 비효율적일 수 있어요.
--subdir을 쓰면 프로젝트 루트가 Git 루트보다 먼저 발견돼요. 대부분 DVC 명령(dvc repro, dvc pull, dvc metrics diff 등)의 작업 범위가 그 하위 디렉터리 프로젝트의 dvc.yaml, .dvc 파일로 한정돼요.
Git 없이 초기화 (--no-scm)
Git 저장소가 아닌 디렉터리에서 초기화하거나, Git을 무시하고 싶을 때 --no-scm을 쓸 수 있어요. Git 외의 버전 관리 시스템을 쓰는 경우에 적합해요. DVC가 파이프라인·데이터를 관리할 때는 단순한 dvc.yaml 파일에 의존하므로 다른 SCM에도 잘 작동해요.
이 모드에서는 버전 관리 관련 기능을 쓸 수 없어요. 예를 들어 dvc add나 dvc stage add 시 .gitignore 파일을 자동 생성·갱신하지 않고, Git 버전을 비교해야 하는 dvc diff·dvc metrics diff도 사용할 수 없어요. --no-scm으로 초기화하면 DVC 설정에 core.no_scm이 true로 기록되어, 나중에 이 프로젝트가 Git에 추적되거나 Git이 초기화돼도 DVC는 계속 Git과 분리된 채로 동작해요.
더 알아보기
- DVC 시작하기 — 전체 워크플로
- dvc add — 데이터 추적
- dvc remote — 원격 저장소 설정