GitHub - 职位 : 什么是 : 使用 actions/checkout

42

我看到了很多对于“:

”的使用。

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

但是我找不到这行代码的目的:

uses : "actions/checkout@something"

它是否类似于这个?

 run: git checkout something   
2个回答

37
对于这行代码:uses : "actions/checkout@something",它将使用 actions/checkout github action(源代码在这里),与 ref something一起使用。这个 ref 只是指 github action 的版本(与您的存储库无关)。 uses 语句是指在此步骤中正在使用的 github action。来自Github 文档关于 jobs.<job_id>.steps[*].uses 的说明如下:
“选择要作为作业步骤的一部分运行的操作。 操作是可重用的代码单元。 您可以使用在同一仓库中定义的操作、公共仓库或发布的 Docker 容器镜像中的操作。”
actions/checkout readme中得知:
“此操作将您的存储库检出到 $GITHUB_WORKSPACE 下,因此您的工作流程可以访问它。”
默认情况下,它只检出一个提交。 我的理解是它做了类似于:
git fetch --depth 1 origin $GITHUB_REF
该操作还会在git配置中保留授权令牌。这样,您的工作流程可以运行经过身份验证的git命令。
默认情况下,它克隆您当前的存储库({{ github.repository }}),但您也可以使用此操作来克隆不同的存储库,并指定其他参数,如tokenbranchpath等...
使用附加输入参数的示例:通过将fetch-depth设置为0(默认为1)来检出所有git历史记录,参见用法文档:
- uses: actions/checkout@v2
  with:
    fetch-depth: 0

这个操作是将你的代码仓库检出到 $GITHUB_WORKSPACE 目录下。你可能误解了,检出操作可以针对整个代码仓库进行,而不仅限于分支的检出。 - Mehdi Charife
为什么将这个动作称为“checkout”,而实际上它是在运行“git fetch”命令? - mustafa candan

11

理解术语使事情更清晰

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

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

回到问题

当执行操作时

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

默认执行的步骤包括:

  1. 克隆触发工作流程的当前仓库。

  2. 根据定义的事件(例如push或pull request)执行以下操作:

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

在命令中引用的环境变量在此处进行了说明。 可以添加其他选项以实现特定的流程或场景,例如检出不同的分支。这些选项可以在官方仓库自述文件中找到。


我不明白为什么在克隆存储库之后(推送事件的情况下),你需要执行git fetch操作。 - Mehdi Charife

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接