几次本地提交后的“ dvc push”

时间:2019-06-29 15:55:34

标签: git dvc

我正在使用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. 在“实验3”提交之后,对尚未推送到远程的所有本地提交执行git checkout commit-hash && dvc push

这两个选项似乎都很麻烦且容易出错。有什么更好的方法吗?

2 个答案:

答案 0 :(得分:3)

@NShiny,有相关票证:

support push/pull/metrics/gc, etc across different commits

请给它投票,以便我们知道如何确定优先顺序。

作为一种解决方法,我建议运行dvc install。它会安装一个pre-push Git挂钩并自动运行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:(

答案 1 :(得分:3)

要减少出错的可能性,可以使用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" after several local commits):

  

在dvc安装命令后是否有禁用钩子的方法?

运行dvc install时,它将在.git/hooks目录下创建三个文件:

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

要禁用它们,您可以删除这些文件(即rm .git/hooks/post-checkout)。

顺便说一句,我编辑了DVC的文档以包括有关此内容的更多信息。