You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在GitHub Actions合并PR后,用sed精准替换文件中的分支名为main

解决GitHub Actions中PR合并后替换笔记本文件分支名为main的问题

问题场景

将PR合并到main分支后,需要批量替换笔记本文件中的PR源分支名为main,但现有sed正则会误替换分支名后的所有内容,同时GITHUB_REF_NAME无法获取PR源分支名,仅指向main分支。

错误示例

  • 对于行git clone --branch fork1 https://somrepo.git,原正则sed -i 's/\(--branch\)\(.*\)/\1 main/'会把fork1 https://somrepo.git全部替换为main,破坏原命令结构
  • 对于行"https://colab.research.google.com/github/user/repo/blob/fork2/notebook.ipynb",原正则sed -i 's/\(blob\/\)\(.*\)/\1 main\//'会把fork2/notebook.ipynb全部替换为main/,丢失文件路径

正确的sed替换方案

1. 处理git clone分支行

利用分支名的字符范围(字母、数字、下划线、短横线)精准匹配,仅替换分支名:

sed -i 's/\(--branch \)[a-zA-Z0-9_-]\+/\1 main/' filename.ipynb
  • 匹配逻辑:\(--branch \)捕获固定前缀,[a-zA-Z0-9_-]\+精准匹配分支名,替换后保留前缀并将分支名改为main

2. 处理Colab链接行

同样精准匹配blob/后的分支名,不影响后续路径:

sed -i 's/\(blob\/\)[a-zA-Z0-9_-]\+/\1 main/' filename.ipynb
  • 匹配逻辑:\(blob\/\)捕获固定前缀,[a-zA-Z0-9_-]\+精准匹配分支名,替换后保留前缀并将分支名改为main

修改后的GitHub Action配置

将原有步骤中的sed命令替换为上述精准匹配命令,支持批量处理所有.ipynb文件:

name: Update Branch Name

on:
  push:
    branches:
      - main

jobs:
  restore_main_branch_name:
    runs-on: ubuntu-latest
    
    steps:
    - name: Checkout code
      uses: actions/checkout@v4
      
    - name: Update .ipynb files
      run: |
        # 替换git clone语句中的分支名
        sed -i 's/\(--branch \)[a-zA-Z0-9_-]\+/\1 main/' *.ipynb
        # 替换Colab链接中的分支名
        sed -i 's/\(blob\/\)[a-zA-Z0-9_-]\+/\1 main/' *.ipynb

    - name: Commit changes
      run: |
        git config --local user.email "actions@github.com"
        git config --local user.name "GitHub Actions"
        git commit -am "Restore main branch name in .ipynb files"
        git push -u origin main
  • 若只需处理特定文件,将*.ipynb替换为具体文件名(如colabLaunchScript.ipynb)即可

内容的提问来源于stack exchange,提问作者Ali J. Ghandour

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 01:48:13