Краткая версия:
.dvc
Файл содержит информацию (md5) о файле JSON внутри кэша, который описывает текущее состояние каталога.
Когда каталог обновляется, в файле .dvc
появляется новый md5, и создается новый файл JSON с обновленным состоянием каталога.
В git вы сохраняете файл .dvc
, чтобы DV C знал (основываясь на md5), где искать информацию о каталоге.
Более длинная версия:
Позвольте мне попробовать нарушить определенные этапы обработки каталогов с помощью DV C.
- Предположим, у нас есть каталог данных, который вы хотите добавить в элемент управления DV C:
data
├── 1
└── 2
- Вы используете
dvc add data
, чтобы DV C отслеживал ваш каталог. В результате DV C создает data.dvc
файл. Как вы заметили, этот файл содержит метаданные, необходимые для подключения вашего хранилища git к вашему хранилищу данных. Внутри этого файла (помимо прочего) вы можете увидеть:
outs:
- md5: f437247ec66d73ba66b0ade0246fcb49.dir
path: data
- Часть
md5
используется для хранения информации о каталоге в кеше DV C (.dvc/cache
) :
(dvc3.7) ➜ repo$ tree .dvc/cache
.dvc/cache
├── 26
│ └── ab0db90d72e28ad0ba1e22ee510510
├── b0
│ └── 26324c6904b2a9cb4b88d6d61c81d1
└── f4
└── 37247ec66d73ba66b0ade0246fcb49.dir
- Если вы откроете файл с суффиксом
.dir
, вы увидите, что он содержит описание текущего состояния data
:
(dvc3.7) ➜ repo$ cat .dvc/cache/f4/37247ec66d73ba66b0ade0246fcb49.dir
[{"md5": "b026324c6904b2a9cb4b88d6d61c81d1", "relpath": "1"},
{"md5": "26ab0db90d72e28ad0ba1e22ee510510", "relpath": "2"}]
Как видите, определенные файлы (1
и 2
) описываются записями в этом файле
- Когда вы меняете каталог:
(dvc3.7) ➜ repo$ echo 3 >> data/3
(dvc3.7) ➜ repo$ dvc commit data.dvc
Содержимое data.dvc
будет обновлено:
outs:
- md5: 12f4b7d54a32e58818e27fba28376fba.dir
path: data
И внутри кеша появится новый файл:
├── 12
│ └── f4b7d54a32e58818e27fba28376fba.dir
...
(dvc3.7) ➜ repo$ cat .dvc/cache/12/f4b7d54a32e58818e27fba28376fba.dir
[{"md5": "b026324c6904b2a9cb4b88d6d61c81d1", "relpath": "1"},
{"md5": "26ab0db90d72e28ad0ba1e22ee510510", "relpath": "2"},
{"md5": "6d7fce9fee471194aa8b5b6e47267f03", "relpath": "3"}]
От перспективы git единственное изменение находится внутри data.dvc
. (Предполагая, что вы сделали git commit
после добавления data
с 1
и 2
внутри):
diff --git a/data.dvc b/data.dvc
index 098aec5..88d1a90 100644
--- a/data.dvc
+++ b/data.dvc
@@ -1,6 +1,6 @@
-md5: a427c5bf8680fbf8d1951806b28b82fe
+md5: 1b674d61c195eea7a6b14f176c020b9c
outs:
-- md5: f437247ec66d73ba66b0ade0246fcb49.dir
+- md5: 12f4b7d54a32e58818e27fba28376fba.dir
path: data
cache: true
metric: false
ПРИМЕЧАНИЕ. Первый md5 соответствует md5 этого файла, поэтому пришлось изменить с помощью dir md5 изменить