«dvc push» после нескольких локальных коммитов - PullRequest
2 голосов
/ 29 июня 2019

Я работаю над проектом с DVC (контроль версий данных). Допустим, я делаю много локальных коммитов. Примерно так:

# make changes for experiment 1
dvc add my_data_file
git add my_data_file.dvc
git commit -m "Experiment 1"

# make changes for experiment 2
# which change both code and data
dvc add my_data_file
git add my_data_file.dvc
git commit -m "Experiment 2"

# make changes for experiment 3
# which change both code and data
dvc add my_data_file
git add my_data_file.dvc
git commit -m "Experiment 3"

# Finally I'm done
# push changes:
dvc push
git push

Однако есть одна проблема: dvc push будет выталкивать данные только из эксперимента 3. Есть ли способ вытолкнуть данные из всех локальных коммитов (т. Е. Начиная с первого коммита, отклоненного от удаленной ветви)?

В настоящее время я вижу два варианта:

  1. Пометить каждый коммит и нажать на него dvc push -T
  2. После коммита «Expermient 3» выполните git checkout commit-hash && dvc push для всех локальных коммитов, еще не отправленных на удаленный сервер.

Обе эти опции кажутся громоздкими и подверженными ошибкам. Есть ли лучший способ сделать это?

Ответы [ 2 ]

3 голосов
/ 30 июня 2019

Чтобы сделать его менее подверженным ошибкам, вы можете использовать HEAD~1 для ссылки на предыдущий коммит вместо использования точного хэша коммита.

Если вы работаете в Bash, вы можете использовать цикл for для итерацииза последние 3 коммита и dvc push содержание.

for x in {1..3}; do git checkout HEAD~1 && dvc push; done

Не забудьте git checkout вернуться в вашу рабочую ветку (т.е. git checkout master)


Ответ на ваш комментарий ( "dvc push" после нескольких локальных коммитов ):

Есть ли способ отключить перехваты после команды установки dvc?

Когда вы запускаете dvc install, он создает три файла в каталоге .git/hooks:

.git/hooks
├── post-checkout
├── pre-commit
└── pre-push

Чтобы отключить их, вы можете удалить эти файлы (т.е. rm .git/hooks/post-checkout).

ПоКстати, я отредактировал документацию DVC, чтобы включить больше информации об этом .

3 голосов
/ 30 июня 2019

@ NShiny, есть связанный билет:

поддержка push / pull / metrics / gc и т. Д. Для разных коммитов .

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

В качестве обходного пути я бы порекомендовал запустить dvc install. Он устанавливает pre-push GIt hook и автоматически запускает dvc push:

Git pre-push hook executes dvc push before git push to upload files and directories under DVC control to remote.

Это значит, что вам нужно запускать git push после каждого git commit: (

...