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

是否可以编写GitHub Action将指定项目的特定列迁移到另一个项目?

方案可行性说明

该需求有完全可行的实现方案,核心通过GitHub官方提供的Projects API配合自定义GitHub Action即可实现,Classic版项目和新版V2项目均支持该操作。

核心实现步骤
  • 首先确认待操作的项目类型,是Classic Project还是Projects V2,两类的API调用参数有明显区别
  • 生成具备项目读写权限的Personal Access Token(PAT):Classic项目需要勾选repo和project权限域,V2项目需要勾选project读写权限,将生成的PAT存到运行Action的仓库Secrets中,可命名为PROJECT_MIGRATION_TOKEN
  • 编写Action工作流文件,存储到仓库.github/workflows/目录下,触发规则可按需设置为定时触发、手动触发或者绑定事件触发(比如新卡片加入源列时自动触发迁移)
  • 核心逻辑分三步:调用API拉取源项目指定列的所有卡片、调用API在目标项目对应列创建相同内容的卡片、按需选择是否删除源项目的原卡片(移动场景开启,复制场景关闭即可)
Classic项目工作流代码示例

以下为手动触发的基础样例,可按需扩展规则:

name: 迁移项目列卡片
on:
  workflow_dispatch: # 配置为手动触发
    inputs:
      source_column_id:
        description: "源项目列ID"
        required: true
      target_column_id:
        description: "目标项目列ID"
        required: true

jobs:
  migrate-cards:
    runs-on: ubuntu-latest
    steps:
      - name: 执行卡片迁移
        env:
          GITHUB_TOKEN: ${{ secrets.PROJECT_MIGRATION_TOKEN }}
          SOURCE_COL_ID: ${{ github.event.inputs.source_column_id }}
          TARGET_COL_ID: ${{ github.event.inputs.target_column_id }}
        run: |
          # 拉取源列所有卡片
          cards=$(curl -H "Authorization: token $GITHUB_TOKEN" "https://api.github.com/projects/columns/$SOURCE_COL_ID/cards" | jq -c '.[]')
          # 遍历创建到目标列
          for card in $cards; do
            note=$(echo $card | jq -r '.note')
            content_id=$(echo $card | jq -r '.content_id')
            content_type=$(echo $card | jq -r '.content_type')
            # 在目标列创建新卡片
            curl -X POST -H "Authorization: token $GITHUB_TOKEN" \
              -H "Accept: application/vnd.github.v3+json" \
              "https://api.github.com/projects/columns/$TARGET_COL_ID/cards" \
              -d "$(jq -n --arg note "$note" --argjson content_id $content_id --arg content_type "$content_type" '{note: $note, content_id: $content_id, content_type: $content_type}')"
            # 如果是移动场景而非复制场景,放开下方注释删除源列原卡片
            # card_id=$(echo $card | jq -r '.id')
            # curl -X DELETE -H "Authorization: token $GITHUB_TOKEN" "https://api.github.com/projects/columns/cards/$card_id"
          done
注意事项
  • 上述样例仅针对Classic Project编写,如果是Projects V2,需要将API请求调整为GraphQL格式,参数对应修改为项目ID、字段ID、工作项ID即可
  • Ubuntu系统的Action运行器默认预装jq工具,不需要额外配置依赖
  • 操作前建议先备份源列的卡片内容,避免误操作导致数据丢失
  • 权限配置要确保PAT对源和目标两个项目都有读写权限,如果项目归属于组织,需要给PAT开通对应组织的访问权限

内容的提问来源于stack exchange,提问作者Harsh arora

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 17:15:04