12

我看到了很多用途:

jobs:
  myjob:
    steps:
      - name: checkout
        uses: "actions/checkout@something"
      - ...

但我找不到这条线的目的是什么:

uses : "actions/checkout@something"

是不是和这个类似?

 run: git checkout something   
4

2 回答 2

13

对于这一行:uses : "actions/checkout@something",它将使用带有 ref的actions/checkoutgithub 操作(来源此处something) 。此参考仅指 github 操作版本(与您的 repo 无关)

uses语句引用了此步骤中使用的 github 操作。来自githubjobs.<job_id>.steps[*].uses文档:

选择要作为作业步骤的一部分运行的操作。动作是可重用的代码单元。您可以使用在与工作流相同的存储库、公共存储库或已发布的 Docker 容器映像中定义的操作。

操作/结帐自述文件

此操作在 $GITHUB_WORKSPACE 下签出您的存储库,以便您的工作流可以访问它。

默认情况下,它只签出一个提交。我的理解是它正在做类似的事情:

git fetch --depth 1 origin $GITHUB_REF

此操作还会在 git config 中保留一个身份验证令牌。这样,您的工作流程可以运行经过身份验证的 git 命令

默认情况下,它会克隆您当前的存储库 ( {{ github.repository }}),但您也可以使用此操作克隆不同的存储库,并指定附加参数token,如branchpath

fetch-depth带有附加输入参数的示例:通过设置为0(默认为1)检查所有 git 历史记录,请参阅用法文档

- uses: actions/checkout@v2
  with:
    fetch-depth: 0
于 2021-04-16T23:02:52.613 回答
3

理解术语使事情更清楚

  • 远程repo - 也可以称为origin
  • Origin - 远程仓库或被克隆的源仓库的默认名称
  • Head - 对分支的人性化名称的引用
  • git checkout - 切换到特定分支并显示当前在该分支上的更改
  • origin/name_of_branch - 从远程 repo 上的特定分支获取更改时创建的分支名称

旁注:使用 git fetch 时,会在本地创建一个自定义分支,格式为“origin/name_of_branch”,可以在本地查看该分支的更改。这些更改是文件的更新版本,而不是在 GitHub 上检查提交时看到的文件中的特定更改。

回到问题什么时候执行动作

jobs:
  myjob:
    steps:
      - name: checkout
        uses: "actions/checkout@something"
      - ...

正在执行的默认步骤是:

  1. 正在其中触发工作流的当前存储库被克隆。

  2. 根据定义的事件,例如推送或拉取请求:

  • 对于推送事件,它运行以下命令,其中 $GITHUB_REF 指向工作流中推送事件的指定分支上的最新提交。
git fetch --depth 1 $GITHUB_REF
  • 对于拉取请求,它检查 $GITHUB_REF 指向拉取请求源分支上的最新提交。这意味着它指向合并拉取请求的潜在代码/结果。这是作业中执行其他步骤的代码/结果,例如运行构建或测试。(不完全确定在后台运行的命令)

命令中引用的环境变量在此处解释。可以添加其他选项来实现特定的流程或场景,例如签出不同的分支。这可以在官方 repo 自述文件中找到。

于 2021-12-08T11:10:42.797 回答