【问题标题】:VSTS GIT REST API ignores the "ExcludeDeletes"; is there a workaround?VSTS GIT REST API 忽略“ExcludeDeletes”;有解决方法吗?
【发布时间】:2018-07-10 10:03:12
【问题描述】:

我遇到了一个问题,这似乎表明 Git 的 VSTS REST API 在边缘情况下无法正常工作。我的目标是通过变基壁球验证是否已从 VSTS 中删除提交;我有 projectId、repositoryId 和 commit hash 可用,并且 API 提供了一种简单的方法 - 或者我认为 - 通过在检索提交时设置“ExcludeDeletes”参数,但它对我来说不能正常工作:我仍然得到来自 VSTS 的提交,就好像它存在一样。

工作流程:

  1. 创建一个存储库。
  2. 创建 3 个提交。
  3. 推送到远程。
  4. 通过执行交互式 rebase --onto 对第二次提交进行 rebase-squash
  5. 强制推送到远程(可能需要先设置权限)
  6. 通过“git log | grep”观察本地不存在的提交
  7. 通过 ProjectId、RepositoryId 和 CommitId 执行 VSTS Api 请求,使用此过滤器:
new GitQueryCommitsCriteria 
{ 
    FromCommitId = {localCommitHash.Hash},
    ToCommitId = {localCommitHash.Hash}, 
    ExcludeDeletes = true 
};
  1. 观察 VSTS 响应中是否存在提交,尽管“ExcludeDeletes”字段设置为“true”。

我还尝试使用 Postman 为 4.1 和 5.0-preview API 发出 GET,但无济于事。

我对 VSTS 的预期行为与项目业务逻辑的关键部分相关,如果能提供任何帮助,我将不胜感激;也许我误解了该领域的意图,在这种情况下,我真的可以使用一些指导来实现我的目标。

【问题讨论】:

    标签: git azure-devops azure-devops-rest-api


    【解决方案1】:

    似乎已删除的提交仍然列出,即使在 REST API Get Commits Batch 中将 excludeDeletes 选项指定为 true

    您似乎已经在developer community 中报告了它。所以你可以在那里跟进并等待功能团队的回应。

    目前从响应中排除已删除提交的解决方法是指定要从中获取提交的分支

    例如,如果您在master 分支上压缩rebase 提交,那么您可以通过请求正文从master 分支获取提交:

    {
      "itemVersion": {
        "versionType": "branch",
        "version": "master"
      },
      "fromCommitId": "string",
      "toCommitId": "string",
    }
    

    然后响应默认排除 master 分支上已删除的提交(提交已被压缩 rebase)。

    【讨论】:

    • 谢谢你的小费,玛丽娜;恐怕我需要所有的分支——本地 repo 是一个镜像克隆,存储提交以用于审计目的——而且,虽然我可以枚举分支,但完成它需要大量的时间。不过感谢您的确认;那我们就绕道去吧。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多