git - 几次本地提交后的“dvc push”
问题描述
我使用 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
- 在“经验 3”提交之后
git checkout commit-hash && dvc 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
)
在多次本地提交后回答您的评论(“dvc push”):
有没有办法在 dvc install 命令之后禁用挂钩?
运行时dvc install
,它会在目录下创建三个文件.git/hooks
:
.git/hooks
├── post-checkout
├── pre-commit
└── pre-push
要禁用它们,您可以删除这些文件(即rm .git/hooks/post-checkout
)。
顺便说一句,我编辑了 DVC 的文档以包含有关此的更多信息。
推荐阅读
- json - 如何获得正确的格式化字符串?
- python - 在 matplotlib 中动态更新绘图(Funcanimation)
- python - 如何从存储为 numpy 数组的顶点创建点云文件(.ply)?
- javascript - 实现设备指纹的网络源
- django - Django REST框架中的文件上传处理
- java - 如何在java中使用用户输入添加2个可变长度数组
- swiftui - space around top of the background image
- sql-server - 如何编写查询以将 SQL Server 数据库模式从 Recovery 更改为 NoRecovery
- reactjs - 将道具传递给顶级组件中的状态
- json - 解组到 map[string]interface{} 后对 ma[string][]string 的类型断言失败