为何actions/checkout在克隆仓库后还要拉取最新提交?
关于actions/checkout重复拉取提交的原因
其实这个操作核心是为了确保工作目录里的代码和触发工作流的目标提交完全一致,主要有这几个原因:
默认克隆的可能不是触发事件的目标分支:比如你推送
feature分支触发了工作流,但actions/checkout默认可能先克隆仓库的默认分支(比如main),这时候就需要通过git fetch --depth 1 $GITHUB_REF拉取你刚推送的feature分支的最新提交,再切换到这个分支执行后续任务。规避浅克隆的时间差问题:actions/checkout默认用
--depth 1做浅克隆,从事件触发到runner启动克隆操作,中间可能存在极短延迟,远程仓库的分支指针可能还没完全同步到触发事件的新提交。额外的fetch操作能精准拉取到触发事件对应的特定提交,避免拿到旧的代码快照。保证提交版本的精确匹配:触发工作流的提交往往是刚推送到远程的,浅克隆时直接拉分支可能因远程缓存或同步问题,拉不到对应的触发提交。用
$GITHUB_REF指定拉取触发事件的引用,能确保工作目录代码和触发事件的版本完全一致,避免后续构建、测试出现版本偏差。
内容的提问来源于stack exchange,提问作者Mehdi Charife
相关产品推荐
相关产品推荐

