如何用GraphQL比较github中的两个分支?

如何用GraphQL比较github中的两个分支?,github,graphql,git-branch,github-graphql,Github,Graphql,Git Branch,Github Graphql,我们可以用Github GraphQL比较两个分支吗 从他们的v3 rest API中,您可以执行以下操作: /repos/:owner/:repo/compare/:base…:head (文件:) 这适用于SHA、分支、标签等 但是,我在文档中找不到它的等效GraphQL查询 这是我迄今为止的尝试: 我可以分别获得每个分支的提交列表,但是,整个历史记录都已加载,我只想知道canary分支和nightly分支之间的区别 query{ repository(owner:"samri

我们可以用Github GraphQL比较两个分支吗

从他们的v3 rest API中,您可以执行以下操作:

/repos/:owner/:repo/compare/:base…:head

(文件:)

这适用于SHA、分支、标签等

但是,我在文档中找不到它的等效GraphQL查询

这是我迄今为止的尝试:

我可以分别获得每个分支的提交列表,但是,整个历史记录都已加载,我只想知道canary分支和nightly分支之间的区别

query{
  repository(owner:"samridh",name:"release-generator"){
    name
    branch0: ref(qualifiedName: "canary"){
      target{
        ... on Commit {
         history(first:100){
           ...CommitFragment
         }
       }
      }
    }
    branch1: ref(qualifiedName: "nightly"){
      target{
        ... on Commit {
         history(first:100){
           ...CommitFragment
         }
       }
      }
    }
  }
}
             
fragment CommitFragment on CommitHistoryConnection {
  totalCount
  nodes {
    oid
    message
    committedDate
    author {
      name
      email
    }
  }
  pageInfo {
    hasNextPage
    endCursor
  }
}
这样做的方式如下:

/repos/samridh/release generator/compare/nightly…canary


不幸的是,在v3 REST API中,在github社区页面上滚动数小时之后,似乎到目前为止,API还没有在v4上迁移,必须通过v3本身完成

但是,V3API只支持250次提交,超出此范围的任何提交都将被忽略且不显示。不过,可以使用graphQL解决这个问题

触发此查询以获取起点和终点:

query getStartAndEndPoints {
  repository(owner: "samridh", name: "release-generator") {
    endPoint: ref(qualifiedName: "canary") {
      ...internalBranchContent
    }
    startPoint: ref(qualifiedName: "nightly") {
      ...internalBranchContent
    }
  }
}

fragment internalBranchContent on Ref {
  target {
    ... on Commit {
      history(first: 1) {
        edges {
          node {
            committedDate
          }
        }
      }
    }
  }
}
这将为您提供查询的开始和结束日期

将这些值插入到:

query findDifference{
  repository(owner:"samridh",name:"release-generator"){
    ref(qualifiedName: "canary"){
      target{
        ... on Commit {
         history(
                  first : 100,
                  after: $(value of previous end cursor) #keep it empty first time
                  until : $(endDate),
                  since: $(startDate),
                  ){
           ...CommitFragment
         }
       }
      }
    }
  }
}

fragment CommitFragment on CommitHistoryConnection {
  totalCount
  nodes {
    oid
  }
  pageInfo {
    startCursor
    hasNextPage
    endCursor
  }
}
并提取所有oid,每次100(Github GraphQL一次只支持100)

最后,您可以调用v3 API,类似地:

/repos/samridh/release-generator/compare/<commit1>...<commit100>
/repos/samridh/release-generator/compare/<commit101>...<commit200>
/repos/samridh/release-generator/compare/<commit201>...<commit300>
/repos/samridh/release generator/compare/。。。
/repos/samridh/release generator/compare/。。。
/repos/samridh/release generator/compare/。。。