如何在CloudBuild中比较Git分支?

Jum*_*wah 5 git bitbucket google-cloud-platform google-cloud-build

我有一个 CloudBuild 触发器设置来监听 bitbucket 存储库。构建完成后,我有一个云函数,它会向提交的作者发送一条松弛消息。

我遇到的问题是 bitbucket 触发repo:push分支创建(通过他们的 UI)。这会触发构建,然后通知源分支的最后一次提交的作者新的构建已准备就绪。

为了防止这种情况,我决定如果触发分支上的最后一次提交也在 master(源分支)上,则防止触发松弛消息。我已经尝试了多种方法,但触发时使用的 CloudBuild 克隆似乎不是完整克隆。我不太清楚本地存储库处于什么状态...看起来 CloudBuild 可能会master在本地调用分支,无论哪个分支触发了构建?例如,这样的命令:

- name: 'gcr.io/cloud-builders/git'
  entrypoint: /bin/bash
  args:
  - -c
  - |
    # Write the author name to the cloud build output
    git show -s --format='%ae' $COMMIT_SHA >> /builder/outputs/output
    # Write the latest commit to the output. 
    git rev-list ^master $COMMIT_SHA -1 >> /builder/outputs/output
Run Code Online (Sandbox Code Playgroud)

即使存在mybranch无法访问的更改,也会提供空白输出master。以下类似命令具有相同的结果:

git log master..$COMMIT_SHA --oneline -1 >> /builder/outputs/output
Run Code Online (Sandbox Code Playgroud)

当我在本地运行时,这两个命令都正确返回分支提交。

如果我添加一些像这样的显式结账步骤(在 rev-list 之前):

git checkout origin master
git checkout origin $BRANCH_NAME
Run Code Online (Sandbox Code Playgroud)

我明白了:

From https://source.developers.google.com/p/myproject/r/bitbucket_myproject_myrepo
* branch            master     -> FETCH_HEAD
* [new branch]      master     -> origin/master
fatal: refusing to merge unrelated histories
From https://source.developers.google.com/p/myproject/r/bitbucket_myproject_myrepo
* branch            feature/mybranch -> FETCH_HEAD
* [new branch]      feature/mybranch -> origin/feature/mybranch
Already up to date.
Run Code Online (Sandbox Code Playgroud)

顺便说一句,这个命令

git log master..$BRANCH_NAME --oneline -1 >> /builder/outputs/output
Run Code Online (Sandbox Code Playgroud)

抛出这个错误

fatal: ambiguous argument 'master..feature/mybranch': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
Run Code Online (Sandbox Code Playgroud)

然而,这个命令不会(但给我留下了可怕的空白值):

git log master..$COMMIT_SHA --oneline -1 >> /builder/outputs/output
Run Code Online (Sandbox Code Playgroud)

我超级困惑。谁能帮助我了解 CloudBuild 在执行该FETCHSOURCE步骤时到底做了什么?

FETCHSOURCE
Initialized empty Git repository in /workspace/.git/
From https://source.developers.google.com/p/myproject/r/bitbucket_myproject_myrepo
* branch            1ed4397bd9825b3eb9fe8dca12409b06975a9c41 -> FETCH_HEAD
HEAD is now at 1ed4397 some commit message
Run Code Online (Sandbox Code Playgroud)

以及如何实现获取仅出现在我的分支(而不是主分支)上的提交列表的目标?

- - 更新 - -

在 @bhito 建议浅层获取之后,我几乎能够在本地重现,但仍然存在我无法解决的差异。在本地执行以下操作:

$ git init
$ git remote add origin myrepo
$ git fetch --depth 1 origin b72b37
$ git checkout FETCH_HEAD
$ git fetch --unshallow
$ git rev-list ^master feature/mybranch -1
fatal: bad revision '^master'
Run Code Online (Sandbox Code Playgroud)

但如果我这样做:

$ git checkout master
$ git checkout feature/mybranch
$ git rev-list ^master feature/mybranch -1
Run Code Online (Sandbox Code Playgroud)

有用!!但仅限于本地。我的重现不太正确,因为在 CloudBuild 克隆中,当我尝试检查 master 时,我得到:

Step #0 - "Setting deployment environment": Already on 'master'
Run Code Online (Sandbox Code Playgroud)

看来 CloudBuild 将提交提取到名为 master 的分支上...我不确定如何,所以无法弄清楚如何返回到我可以执行的位置rev-list