Atlasstian/Stash Git API - 获取在提交之间修改的文件的名称



我正在尝试创建一个夜间进程,该进程将创建一个在前一天的最后一次提交和分支的当前HEAD之间更改的文件列表。

我一直在看Stash API,可以在这里找到:

https://developer.atlassian.com/static/rest/stash/3.11.3/stash-rest.html

看起来/compare/changes/diff将能够完成任务,但我只能让他们为单次提交更改工作。

有没有办法扩展它,以便我可以在多个提交之间更改所有文件名?

例如:commit1commit10 之间的所有文件?

这个怎么样:

https://stash.domain.com/rest/api/latest/projects/{project}/repos/{repository}/changes?since={commit_1}&until=${commit_10}

我只是简单地看了一眼(他们有一些奇怪的术语,称这些为"变更集"而不是"提交"ID:这对Mercurial有意义,但对Git不重要),但API确实需要两个ID,这就是你所需要的。

例如,在您的示例中,您想查看发生了什么

在提交 1 到提交 10 之间

"between"这个词有点可疑(因为提交首先不一定是线性的,并且因为它引入了栅栏错误),但一般来说,要做到这一点,您只需将(ID)commit1(或其父级,取决于您是在计算栅栏还是栅栏杆)与(ID)commit10进行比较。

当使用 Git 执行此操作时,而不是通过一些烦人的 REST API 时,它表示为,例如:

$ git diff --name-status 1fe9ca7 6631bed

它显示了6631bed中所有变化与1fe9ca7中任何变化,由于变更集的代数,这是每个变更集"之间"(又是那个滑溜溜的词)两个端点的总和。

Git 不存储这些变更集;它存储每次提交时的实际内容。 因此,变更集是按需生成的(由 git diff ),这就是为什么它们的术语看起来有点奇怪。 你确定两个实际的提交,而不是一个变更集,然后 git 提取一个变更集。

您可以

git diff命令涉及的两个提交提供SHA

git diff --name-only SHA1 SHA2 

这篇文章提供了有关使用 ..... 来获取您可能正在寻找的集合的详细信息(如果您选择这种格式 - 在提交之间使用点进行差异)

注意:--name-only:仅显示已更改文件的名称。

我认为以下内容应该有效:

  • 假设最后一个提交哈希是:abcdefg
  • 分支名称为开发,其头部要与

以下 curl 请求可以为您提供差异:

curl -s -

H "Content-Type: application/json" http(s)://rest/api/1.0/projects/project-key/repos/repo-slug/compare/changes?from=refs/heads/develop&to=abcdefg&limit=1000

笔记:

  • 添加了"限制"参数,以便可以显示到 1000 条记录。默认页面大小为 25。
  • "jq"是一个 JSON 解析器实用程序,可以选择用于解析响应。
    例如,我将上述 curl 的响应"管道"到以下,以仅获取已更改的文件名:

    jq '.values|.[]|.路径|。到字符串'

最新更新