GitHub Action从私有仓库复制JSON文件后目标仓库无文件
问题排查与修复方案
核心原因:缺少推送步骤
你的Action仅完成了本地代码提交,但没有把提交内容推送到远程仓库,这是目标仓库看不到文件的直接原因。
修复后的完整配置
name: copy JSONs on: push: workflow_dispatch: jobs: copy_files: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 # 指定要推送的目标分支,根据实际仓库分支名修改(比如master) with: ref: main - name: Copy files from private repo uses: actions/checkout@v2 with: repository: paramm/cron-jobs # 建议把token存在仓库Settings>Secrets里,用变量引用,不要明文写 token: ${{ secrets.PRIVATE_REPO_TOKEN }} path: private-repo-files - name: Create directory for copied files run: | mkdir -p copied-files # 加-p避免目录已存在时报错 # 加容错判断,无JSON文件时不中断流程 mv private-repo-files/*.json copied-files/ || echo "未找到JSON文件" - name: Add and commit copied files run: | git config --local user.email "action@github.com" git config --local user.name "GitHub Action" git add copied-files # 检查是否有变更再提交,避免空提交报错 git diff --quiet && git diff --staged --quiet || git commit -m "Add copied files from private repo" - name: Push changes to remote uses: ad-m/github-push-action@master with: branch: main # 和checkout的分支保持一致 github_token: ${{ secrets.GITHUB_TOKEN }} # 用默认token即可,需确保Action有写入权限
额外优化说明
- Token安全:绝对不要在YML里明文写
ghp_xxx格式的token,将其存储在仓库的Settings > Secrets and variables > Actions中,通过${{ secrets.变量名 }}引用,防止泄露。 - 分支一致性:明确指定checkout和push的分支,避免因默认分支不一致导致提交到错误分支。
- 容错处理:添加
mkdir -p、mv命令容错、空提交检查,避免因意外情况导致流程中断。 - 权限确认:确保使用的token拥有目标仓库的写入权限,默认的
GITHUB_TOKEN需要在仓库设置中开启Actions的写入权限。
内容的提问来源于stack exchange,提问作者igs
相关产品推荐
相关产品推荐

