"dvc push" 在几次本地提交之后
"dvc push" after several local commits
我在一个使用 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
推送它
- 在 "expermient 3" 提交后对所有尚未推送到远程的本地提交执行
git checkout commit-hash && dvc push
。
这两个选项看起来都很麻烦且容易出错。有没有更好的方法呢?
@NShiny,有相关工单:
support push/pull/metrics/gc, etc across different commits.
请给它投票,以便我们知道如何确定它的优先级。
作为解决方法,我建议 运行 dvc install
。它会自动安装 pre-push
GIt 挂钩和 运行s dvc push
:
Git pre-push hook executes dvc push before git push to upload files and directories under DVC control to remote.
这意味着,尽管您需要在每个 git commit
之后 运行 git push
:(
为了减少出错的可能性,您可以使用 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
)
正在回答您的评论():
Is there a way to disable hooks after dvc install command?
当你运行dvc install
时,它会在.git/hooks
目录下创建三个文件:
.git/hooks
├── post-checkout
├── pre-commit
└── pre-push
要禁用它们,您可以删除这些文件(即 rm .git/hooks/post-checkout
)。
顺便说一下,我编辑了 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 中推送数据。有什么方法可以从所有本地提交中推送数据(即从远程分支的第一个提交开始)?
目前我看到两个选项:
- 标记每个提交并用
dvc push -T
推送它
- 在 "expermient 3" 提交后对所有尚未推送到远程的本地提交执行
git checkout commit-hash && dvc push
。
这两个选项看起来都很麻烦且容易出错。有没有更好的方法呢?
@NShiny,有相关工单:
support push/pull/metrics/gc, etc across different commits.
请给它投票,以便我们知道如何确定它的优先级。
作为解决方法,我建议 运行 dvc install
。它会自动安装 pre-push
GIt 挂钩和 运行s dvc push
:
Git pre-push hook executes dvc push before git push to upload files and directories under DVC control to remote.
这意味着,尽管您需要在每个 git commit
之后 运行 git push
:(
为了减少出错的可能性,您可以使用 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
)
正在回答您的评论(
Is there a way to disable hooks after dvc install command?
当你运行dvc install
时,它会在.git/hooks
目录下创建三个文件:
.git/hooks
├── post-checkout
├── pre-commit
└── pre-push
要禁用它们,您可以删除这些文件(即 rm .git/hooks/post-checkout
)。
顺便说一下,我编辑了 DVC 的文档以包含有关此内容的更多信息。