【问题标题】:Git log - show merge request IDGit 日志 - 显示合并请求 ID
【发布时间】:2021-12-01 15:16:24
【问题描述】:

如何根据提交 ID 或最后一次合并请求找到合并请求 ID?我想在 CURL 请求中包含合并请求 ID,但我无法使用 git log 命令找到 ID。

http://10.10.10.10/api/v4/projects/9/merge_requests/67/notes 

【问题讨论】:

  • 请注意,“合并请求”特定于 GitLab:它们在 Git 中并不存在。如果 GitLab 不将它们放入较低级别的 Git 部分,您将无法从 Git 本身获取它们,只能从 GitLab 获取。

标签: git gitlab


【解决方案1】:

Gitlab 存储,在分支和标签旁边,额外的 merge-requests/... 引用指向合并请求提交。你可以查看这些正在运行的git ls-remote

$ git ls-remote origin
ed228a67a...    HEAD
7215f3432...    refs/heads/cache
4ed228a67...    refs/heads/master
...
d2cc93ae3...    refs/merge-requests/1023/head    # current commit for MR #1023
a888aabaf...    refs/merge-requests/1023/merge
...

您可以将这些引用拉到您的本地仓库中,例如通过更新配置中的 refspec(改编自 this gist):

[remote "origin"]
    url = git@github.com:joyent/node.git
    fetch = +refs/heads/*:refs/remotes/origin/*
    fetch = +refs/merge-requests/*/head:refs/remotes/origin/mr/*   # <- add this line

然后运行git fetch

您现在应该在 git log 的输出中看到 origin/mr/{xxx} 引用,并在其他命令中使用这些名称。

例如,您可以检查提交是否是拉取请求:

git for-each-ref refs/remotes/origin/mr --points-at <commit-ish>

【讨论】:

  • GitHub?这个问题是关于 GitLab 合并请求的。
  • @VonC:是的,但是 OP 用github 标记了它。我即将删除该标签...
  • 改写了我的答案以匹配 Gitlab 设置
【解决方案2】:

您可能需要首先列出合并请求,可能按状态过滤它们,然后take the first one(使用jq| jq '.[0])。
List project merge requests:

GET /projects/:id/merge_requests?state=opened
curl --header "Private-Token: askljdhakjdlsa" "http://10.10.10.10/api/v4/projects/9/merge_requests?state=opened"

【讨论】:

  • 我可以使用提交 ID 找到它吗?因为我可以使用git log 获取提交 ID,并且可以同时有多个合并请求,我最终可能会选择错误的合并请求。如果我可以使用提交 ID 进行搜索,那么我会找到正确的合并请求
  • @anon 第一个“sha”是答案的一部分,这意味着您可以使用 jq 按 sha 过滤,查找您的特定提交。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-03
  • 1970-01-01
  • 2020-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-15
相关资源
最近更新 更多