对于任何拉取请求,GitHub 提供三种评论视图:整个拉取请求的评论、拉取请求中特定行的评论,以及拉取请求中特定提交的评论。
这些类型的评论分别通过 GitHub API 的不同部分进行处理。在本指南中,我们将探讨如何访问和操作每种类型。对于每个示例,我们将使用在“octocat”仓库中创建的此示例拉取请求。与往常一样,可以在我们的平台示例仓库中找到示例。
拉取请求评论
要访问拉取请求上的评论,您将使用管理问题的端点。这乍一看可能有些违反直觉。但一旦您理解拉取请求只是带有代码的问题,使用这些端点在拉取请求上创建评论就说得通了。
我们将通过使用Octokit.rb创建一个 Ruby 脚本,演示如何获取拉取请求评论。您还需要创建一个个人访问令牌。
以下代码可以帮助您开始使用 Octokit.rb 访问拉取请求中的评论
require 'octokit'
# !!! DO NOT EVER USE HARD-CODED VALUES IN A REAL APP !!!
# Instead, set and test environment variables, like below
client = Octokit::Client.new :access_token => ENV['MY_PERSONAL_TOKEN']
client.issue_comments("octocat/Spoon-Knife", 1176).each do |comment|
username = comment[:user][:login]
post_date = comment[:created_at]
content = comment[:body]
puts "#{username} made a comment on #{post_date}. It says:\n'#{content}'\n"
end
在这里,我们专门调用 API 获取评论(issue_comments
),并提供仓库的名称(octocat/Spoon-Knife
)以及我们感兴趣的拉取请求 ID(1176
)。之后,只需遍历这些评论即可获取有关每个评论的信息。
拉取请求中某行的评论
在差异视图中,您可以针对拉取请求中进行的单个更改的特定方面开始讨论。这些评论出现在已更改文件中的各个行上。此讨论的端点 URL 来自于管理拉取请求审查的端点。
以下代码获取了在给定单个拉取请求号的文件上进行的所有拉取请求评论
require 'octokit'
# !!! DO NOT EVER USE HARD-CODED VALUES IN A REAL APP !!!
# Instead, set and test environment variables, like below
client = Octokit::Client.new :access_token => ENV['MY_PERSONAL_TOKEN']
client.pull_request_comments("octocat/Spoon-Knife", 1176).each do |comment|
username = comment[:user][:login]
post_date = comment[:created_at]
content = comment[:body]
path = comment[:path]
position = comment[:position]
puts "#{username} made a comment on #{post_date} for the file called #{path}, on line #{position}. It says:\n'#{content}'\n"
end
您会注意到它与上面的示例非常相似。此视图与拉取请求评论之间的区别在于对话的重点。在拉取请求上发表的评论应保留用于讨论或关于代码总体方向的想法。作为拉取请求审查一部分发表的评论应专门处理在文件中实现特定更改的方式。
提交评论
最后一类评论专门出现在单个提交上。因此,它们使用了管理提交评论的端点。
要检索提交上的评论,您需要使用提交的 SHA1。换句话说,您不会使用与拉取请求相关的任何标识符。以下是一个示例
require 'octokit'
# !!! DO NOT EVER USE HARD-CODED VALUES IN A REAL APP !!!
# Instead, set and test environment variables, like below
client = Octokit::Client.new :access_token => ENV['MY_PERSONAL_TOKEN']
client.commit_comments("octocat/Spoon-Knife", "cbc28e7c8caee26febc8c013b0adfb97a4edd96e").each do |comment|
username = comment[:user][:login]
post_date = comment[:created_at]
content = comment[:body]
puts "#{username} made a comment on #{post_date}. It says:\n'#{content}'\n"
end
请注意,此 API 调用将检索单行评论以及在整个提交上发表的评论。