Git &引用;“dvc推送”;在几次本地提交之后

Git &引用;“dvc推送”;在几次本地提交之后,git,dvc,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_

我在一个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推送它
  • 在“Experment 3”提交后,对所有尚未推送到远程的本地提交执行git checkout提交哈希和dvc推送

  • 这两个选项看起来都很麻烦,而且容易出错。有更好的方法吗?

    @NShiny,有一张相关的票:

    请给它投票,这样我们就知道如何优先考虑它

    作为一种解决方法,我建议运行。它安装一个
    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提交后运行
    git push
    :(

    为了减少错误发生率,您可以使用
    HEAD~1
    引用上一次提交,而不是使用确切的提交哈希

    如果您使用的是Bash,那么可以使用for循环来迭代最后3次提交和dvc推送内容

    用于{1..3}中的x;执行git签出头~1&&dvc push;完成
    
    记住
    git checkout
    返回您的工作分支(即
    git checkout master


    回答您的评论():

    有没有办法在dvc安装命令后禁用挂钩

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

    .git/hooks
    ├── post-checkout
    ├── pre-commit
    └── pre-push
    
    要禁用它们,您可以删除这些文件(例如,
    rm.git/hooks/post checkout


    顺便说一句,我编辑了DVC的文档以包含更多关于此的信息。

    感谢您的回复!顺便说一句,DVC安装
    文档描述了如何将DVC挂钩安装到存储库中,但没有解释如何卸载。有没有办法在
    DVC安装
    命令后禁用挂钩?