VSTS GIT REST API会忽略“ ExcludeDeletes”;有解决方法吗?

时间:2018-07-10 10:03:12

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

我遇到了一个问题,该问题似乎指向针对Git的VSTS REST API在极端情况下无法正常工作。我的目标是验证是否已通过rebase壁球从VSTS中删除了提交;我有可用的projectId,repositoryId和commit哈希值,并且API提出了一种简单的方法-或者我认为-通过在获取提交时设置“ ExcludeDeletes”参数,但它对我来说仍然无法正常工作:我仍然可以来自VSTS的提交,就好像它已经存在一样。

工作流程:

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

我还尝试过使用Postman发行GET,用于4.1和5.0预览版API,都无济于事。

我在这里从VSTS期望的行为与该项目的业务逻辑的关键部分联系在一起,在此问题上的任何帮助,我将不胜感激;也许我误会了该领域的意图,在这种情况下,我确实可以使用一些指导来实现目标。

1 个答案:

答案 0 :(得分:0)

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

看来您已经在developer community中进行了举报。这样您就可以在那里进行后续工作,并等待功能团队的回应。

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

就像您在master分支上压榨基础提交一样,则可以通过请求正文从master分支获取提交:

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

然后默认情况下,响应会在master分支上排除已删除的提交(这些提交已被压缩为基准)。