Как добавить файл в папку, отслеживаемую dvc, без извлечения содержимого всей папки?

#dvc

Вопрос:

Допустим, я работаю в репо git/dvc. Существует папка data , содержащая 100 тысяч небольших файлов. Я отслеживаю его с помощью DVC как один элемент, как рекомендовано в документе:

 dvc add data
 

и потому, что, по моему опыту, DVC довольно медленно отслеживает такое количество файлов один за другим.

Я клонирую репозиторий в другом рабочем пространстве, и теперь у меня есть data.dvc файл локально, но внутри еще нет реальных файлов. Я хочу добавить файл с именем newfile.txt в data папку и отслеживать его с помощью DVC. Есть ли способ сделать это, не извлекая все содержимое data локально ?

То, что я пытался сделать сейчас:

  1. data Повторное добавление папки:
     mkdir data
    mv path/to/newfile.txt data/newfile.txt
    dvc add data
     

    data.dvc Файл снова создается из локального состояния data , которое содержит только newfile.txt содержимое, поэтому это не работает.

  2. Добавление файла в виде одного элемента в data папку:
      dvc add data/newfile.txt
     

    Я получаю :

      Cannot add 'data/newfile.txt', because it is overlapping with other DVC tracked output: 'data'. 
     To include 'data/newfile.txt' in 'data', run 'dvc commit data.dvc'
     
  3. Использование фиксации dvc, как было предложено
      mkdir data
     mv path/to/newfile.txt data/newfile.txt
     dvc commit data.dvc
     

    Аналогично, как 1., data.dvc он снова перестраивается из локального состояния data .

Комментарии:

1. ре DVC is kinda slow when tracking that many files one by one. Ограничение больше связано с файловой системой. Способ работы DVC заключается в том, что он создает метафайл .dvc для каждого файла/каталога, который вы хотите отслеживать как объект. Для добавления 100 тыс. файлов отдельно требуется управление 100 тыс. метафайлами, что включает в себя множество операций ввода-вывода. Вот почему DVC допускает детализацию в большинстве своих команд, даже если вы отслеживаете целые каталоги, например, вы можете dvc add data; dvc push data/some/file

Ответ №1:

Я клонирую репозиторий в другом рабочем пространстве, и теперь у меня есть файл data.dvc локально, но внутри еще нет ни одного фактического файла (не dvc pull редактировался). Я хочу добавить файл в папку данных и отслеживать его с помощью DVC. Есть ли способ сделать это, не извлекая все содержимое данных локально ?

Интересный вопрос. Я думаю, что есть простой способ сделать это сейчас, потому что в этой другой машины, если ты dvc add data еще раз, но только один файл в каталоге, видеоконференции, будет думать, что вы удалили все файлы, создать новую резервную копию данных, реж (содержащих только этот новый файл), и обновления .файл DVC соответственно (как вы обнаружили).

Вы можете открыть запрос на функцию в https://github.com/iterative/dvc.org/issues.