我使用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中的数据。是否有任何方法从所有本地提交(即从第一次提交开始,从远程分支分离)中推送数据?
目前,我看到两种选择:
dvc push -T将其推送git checkout commit-hash && dvc push,而不是将其推送到远程。这两种选择似乎都很麻烦,而且容易出错。有什么更好的方法吗?
发布于 2019-06-29 21:10:49
@NShiny,有一张相关的票:
请投一票,这样我们就知道如何把它放在优先位置了。
作为解决办法,我建议运行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:
发布于 2019-06-30 12:59:27
为了减少错误的发生,您可以使用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推送“):
有办法在dvc安装命令之后禁用钩子吗?
运行dvc install时,它会在.git/hooks目录下创建三个文件:
.git/hooks
├── post-checkout
├── pre-commit
└── pre-push要禁用这些文件,可以删除这些文件(即rm .git/hooks/post-checkout)。
顺便说一下,我编辑了DVC的文档,以包含更多有关这方面的信息。
https://stackoverflow.com/questions/56818930
复制相似问题