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

时间:2016-04-25 06:32:32

标签: git api bitbucket-server

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

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

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

它看起来像/compare/changes/diff能够完成任务,但我只能让它们用于单个提交更改。

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

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

4 个答案:

答案 0 :(得分:2)

这个怎么样:

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

答案 1 :(得分:0)

您可以为git diff命令所涉及的提交提供SHA

git diff --name-only SHA1 SHA2 

此帖提供了有关使用.....获取您可能正在寻找的内容的详细信息(如果您采用该格式 - using dot for diff between commits

  

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

答案 2 :(得分:0)

我只是简单地看了一眼(并且他们有一些奇怪的术语,称这些“更改集”而不是“提交”ID:这对Mercurial有意义,但不适用于Git)但API 确实取两个ID,这就是你所需要的。

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

  

在commit1到commit10之间

“between”这个词有点可疑(因为提交首先不一定是线性的,因为它引入了fencepost错误),但一般来说,为了做到这一点,你只需比较(ID)commit1(或它的父母,取决于你是否计算围栏帖子或围栏 rails )对(提交的ID)。

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

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

显示6631bed1fe9ca7中的所有内容相比发生的变化,由于变更集的代数,它是“每个变更集之间的总和”(再次出现那个滑的字)两个终点。

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

答案 3 :(得分:0)

我认为以下应该可行:

  • 假设最后一次提交哈希为:abcdefg
  • 分支名称为 develop ,其标题将与之比较

遵循curl请求可以给您带来不同:

curl -s -H“内容类型: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 |。[] | .path | .toString'