在 Github 操作中获取修改后的文件

2023-12-02

我的存储库中有 2 个 Github Actions 工作流程,其中一个步骤需要获取 PR 中已修改的所有文件(删除的文件除外)。我在第一个中使用这个:

on:
  pull_request:
    branches: [ main ]


jobs:
  get_files:
    name: run_on_pr
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@master
        with:
          fetch-depth: 0

      - name: Modified files
        run: |
          git fetch origin main:main
          git diff --name-only --diff-filter=d main~ main

这个工作正常,我可以获得所有已修改文件的列表。但是,在第二个工作流程中(应该在合并 PR 时运行),这不起作用。

on:
  push:
    branches: [ main ]


jobs:
  get_files:
    name: run_when_pr_is_merged
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@master
        with:
          fetch-depth: 0

      - name: Modified files
        run: |
          git fetch origin main:main
          git diff --name-only --diff-filter=d main~ main

我收到错误fatal: refusing to fetch into branch 'refs/heads/main' checked out at '/home/runner/....'。我认为错误来自git fetch origin main:main当工作流程运行时main分支,我正在尝试在那里进行提取。我已经删除了它,但仍然没有得到我需要的列表。有什么帮助或更好的方法来获取两个工作流程中 PR 中已修改文件的列表吗?


比这更复杂一点。

对于 PR 的 GitHubaction/checkout创建一个分离头,模拟 PR 合并到目标分支中。您可以在结帐操作本身的日志中看到它。您可以通过使用不同的引用来改变这种行为,但我不推荐它 - 它实际上使事情变得更容易,特别是对于分叉的 PR。

要获取 PR 中已更改文件的列表,您只需使用 fetch-depth: 2 签出即可获取以前的提交,然后获取通过合并修改的文件:

- name: Checkout
  uses: actions/checkout@v3
  with:
     fetch-depth: 2
- name: Get changes
  run: git diff --name-only -r HEAD^1 HEAD

For push事件,它也有点复杂,因为你可以在一次推送中进行多次提交,所以这里你必须获取深度:0,然后使用 GitHub 上下文值来找出push:

- name: Checkout
  uses: actions/checkout@v3
  with:
     fetch-depth: 0
- name: Get changes
  run: git diff --name-only ${{ github.event.before }} ${{ github.event.after }}

如果您想要一个工作流程来处理这两个问题,您可以执行以下操作:

- uses: actions/checkout@v3
  with:
      fetch-depth: ${{ github.event_name == 'pull_request' && 2 || 0 }}
- name: Get changed files
  id: changed-files
  run: |
      if ${{ github.event_name == 'pull_request' }}; then
          echo "changed_files=$(git diff --name-only -r HEAD^1 HEAD | xargs)" >> $GITHUB_OUTPUT
      else
          echo "changed_files=$(git diff --name-only ${{ github.event.before }} ${{ github.event.after }} | xargs)" >> $GITHUB_OUTPUT
      fi
- name: List changed files
  run: |
      for file in ${{ steps.changed-files.outputs.changed_files }}; do
          echo "$file was changed"
      done
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Github 操作中获取修改后的文件 的相关文章

  • 递归地将整个文件夹添加到存储库

    我正在尝试向 GitHub 上的 master 分支添加一个分支 并将一个文件夹推送到该分支上 分支的文件夹结构如下所示 Social App Source Code Dev Trunk Social App 以及所有源代码文件都在最后一个
  • 如何使用 OR/AND 运算符在 GitHub 上进行搜索

    如何在 GitHub 上搜索包含关键字 java AND python 或 C 的问题 是否可以使用 OR AND 等逻辑运算符来表示搜索 事实证明 GitHub并没有提供实现ANR OR这样的搜索逻辑的函数 我想到的解决方案是编写一个爬虫
  • GIT Pull 删除了我的提交

    在 git pull 之后 我已经完成了 git Reset 以在合并之前撤消与提交 ID 的合并 不知何故 我的整个提交都消失了 而且我也无法在历史记录中看到该提交 但我有提交 id 在 git show 命令上我可以看到我的更改 我如何
  • VS Code / Bitbucket / SSH - 权限被拒绝(公钥)

    我试图通过 ssh 从 vscode 访问 bitbucket 但总是得到权限被拒绝 公钥 SSH 密钥位于 ssh 公钥已正确设置在bitbucket settings security sshkeys 按键已经过测试并且可以工作 启动后
  • 在“git rm -rf”之后恢复暂存但未提交的文件

    在我的本地计算机上 我从文件夹中删除了文件 git init git add all 然后我写了 不要问我为什么 git rm rf 我还没有承诺 现在我的项目中有空文件夹 在 git文件夹有objects包含 53 Mb 的文件 我怎样才
  • 如果检测到更改中的特定短语,如何阻止 git commit?

    我注意到开发人员倾向于做的一些模式 例如使用以下代码提交 javascript 测试fdescribe or fit留在其中 这意味着只有一个测试 套件将运行 通常是在审查阶段发现的 但最好尽早发现这些小事情 想知道是否有一种方法可以配置
  • 在大型团队中使用 git VS Mercurial 和 Xcode 进行 iOS 开发有何优缺点?

    我们希望在一个项目上一起工作 签出 签入文件 一些开发人员推荐 git 其他开发人员更喜欢 Mercurial 有没有人对这两者都有经验 并且能告诉我为什么我应该花时间在不与 Xcode 集成的 Mercurial 上 而不是只使用集成的
  • git 中的 web.config 和 app.config 机器特定设置

    我们在不同的办公室有多个开发团队 他们需要为我们项目中的许多配置设置使用不同的值web config and app config files 我们希望使用一组合理的默认值来检查这些配置文件 这样通过检查 trunk master 分支 您
  • Visual Studio 代码中的“Git:gpg 未能签署数据”

    全新安装 Linux 后 我尝试设置我的环境 并且不断收到Git gpg failed to sign the data在本地提交更改时出错 我使用的是 Visual Studio Code 专有版本 而不是开源版本 gitconfig u
  • Git fetch 在 for-each-ref 中不显示远程分支

    我有一个远程分支feature test2 我想把它拿过来 我跑 git fetch origin feature test2 我得到 From
  • 如何找出在哪个提交中添加了特定代码?

    我想知道我在哪个提交中添加了下面给出的代码 if getListView getChildCount 0 getActivity findViewById android R id empty setVisibility View VISI
  • 如何在Github操作中指定节点的路径?

    我正在尝试使用 Github 的 node js 工作流程在我的存储库上进行自动化测试 但是 我遇到了困难 因为节点是在子目录中设置的 而不是在存储库的根目录中 我一直在寻找一种方法来指定运行 npm 命令的目录 但没有找到任何答案 这是工
  • Git:从远程获取特定对象

    在工作中我们必须应对一个非常庞大的 git 存储库 90Go 在尝试调整本地副本上的一些内容后 我的包文件出现错误 尝试解压它 我可能删除了一些目标文件 例如 gt git GC 错误 无法读取 af9ed8 snip 致命 坏树对象 af
  • git:推送单个提交

    假设我进行了多次提交 并希望挑选哪些提交到远程存储库 我该怎么做 在ascii中 C1 gt C2 gt C3 gt C4 我想推C2和C4 通过变基 重置 推送然后重置进行重新排序是否有效 C1 gt C2 gt C3 gt C4 gt
  • 从 svn 到 git,移动了主干

    我正在尝试将 svn 存储库切换到 git 这是一个旧的存储库 以前的维护者之一为每个新版本移动了主干 例如 以前的存储库位于 svn ssh svn mycompany com project release 1 trunk 现在 我们当
  • 使用 git 合并两个文件夹

    我正在和一些以前从未使用过 git 的人一起开发一个项目 由于不了解 git 的功能 他们创建了该项目的两个版本 开发版本和生产版本 这两个版本都存在于当前环境中 更复杂的是 除了旧的开发文件夹之外 另一个用户还创建了这些文件夹 所以项目目
  • 如何从旧提交创建新的 Git 分支? [复制]

    这个问题在这里已经有答案了 可能重复 最近 不太明确的问题 使用 Git 从先前的提交分支 http stackoverflow com questions 2816715 branch from a previous commit usi
  • 获得干净的 git 沙箱的最有效方法是什么?

    对于我的持续集成构建 我想确保我的 git 沙箱中没有存放任何杂散文件 并且没有任何文件被无意中更改 我知道关于git reset hard HEAD 这解决了部分问题 但我想我想做的是删除所有未跟踪和忽略的文件 我可以用蛮力的方式做到这一
  • 如何快速查看哪个 Git 分支是最新的?

    例如 如果 git 上有 4 个分支 如下所示 branch1 branch2 current branch branch3 newest commits here master oldest 我的问题是 如何从 git 命令行检查我当前的
  • Mac 操作系统屏幕上的 Git 自动补全

    我在 mac 上使用 git 并配置了自动完成功能 如下所示http www codethatmatters com 2010 01 git autocomplete in mac os x http www codethatmatters

随机推荐

  • 检测“暂停”的 Windows 8/10 进程

    Windows 8 10 中的 UWP 或 Metro 应用程序不在前台时可以暂停 处于此状态的应用程序继续存在 但不再消耗 CPU 时间 看来引入此更改是为了提高平板电脑和手机等低功耗 存储设备的性能 检测处于这种状态的进程的最优雅 最简
  • 如何检查SQLite文件一致性(健康检查)

    我在 Android 应用程序中使用 SQLite 数据库文件 该文件是使用以下方法从存储在资产文件夹中的多个部分创建的 ReignDesign 在 Android 应用程序中使用您自己的 SQLite 数据库 组装过程完成后 我想检查数据
  • 无法启动 Hyper-V 容器

    在此输入图像描述我正在尝试运行 docker 容器 但收到以下错误消息 因为未启用 Hyper V 和虚拟化 但我已经启用了 Hyper V 和虚拟化 我已经通过 Bios 以及 power shell 命令进行了 Hyper V 设置 尽
  • 无法从 Jenkins CI 启动浏览器

    当从 Jenkins 构建后通过调用 rake 任务触发黄瓜测试时 我无法在 CI 服务器上启动浏览器 在我的例子中是 Linux 上的本地主机 Jenkins 控制台日志如下 我非常确定一切都设置正确 因为我可以通过命令行在服务器上成功运
  • OpenCV 2.3 编译问题 - 未定义的参考 - Ubuntu 11.10

    系统信息 Ubuntu 11 10 64 位 和 OpenCV 2 3 今天安装 我正在尝试在 OpenCV 2 3 中编译一些非常简单的代码 但出现了一个奇怪的错误 include
  • 来自 python 的 Windows 特殊文件夹和已知文件夹(开始菜单、下载等)[重复]

    这个问题在这里已经有答案了 确定Windows路径的最佳方法是什么特殊文件夹 and 已知文件夹在Python中 我发现了几种流行的 SpecialFolders 方法 也称为CSIDL 但还没有什么简单的事情已知文件夹ID 保持了向后兼容
  • 使用 * 访问方法中的值

    在方法定义中 当 按以下方式使用 这是什么意思 def foo end 我理解以下用法 def foo args end 我不确定在前一种情况下如何访问方法参数 它的意思是 接受和丢弃任意数量的参数 两个定义在技术上是相同的 但不给参数数组
  • 使用 Apple Healthkit 测量心率

    我目前正在应用程序中使用 Healthkit 获取大多数类型的信息都没有问题 但在心率方面遇到问题 每次我尝试读取样本时 结果都是 0 我有一块 Apple Watch 我的心率被输入到 Apple Health 应用程序中 并且可以在那里
  • JSF:Mojarra 2.1 到 2.2 迁移导致 ViewExpiredException

    我正在将应用程序从 PrimeFaces 3 5 18 Mojarra 2 1 26 移植到 PrimeFaces 4 0 2 Mojarra 2 2 4 当我重新启动服务器时 我收到 ViewExpiredException 服务器日志包
  • HRESULT 异常:0x800AC472

    当我将 Excel 应用程序的 displayalert 属性设置为 true 时 会触发此异常 为什么 属性浏览器是否已暂停 如果是这样 这可能会有所帮助 来自 Excel 中集合运算的 HRESULT 800ac472 一个建议是将您的
  • 批处理文件 - 下载最新的 FTP 文件夹

    我正在尝试从 FTP 服务器下载最新的文件夹 该文件夹包含多个文件夹 其中包含多个 CSV 文件 我遇到的问题是每天都会创建文件夹 每次运行脚本时我只希望它下载该位置的最新文件夹 我不知道如何指定这一点 甚至不知道如何使用批处理文件从 FT
  • 添加更复杂的子类公理

    我偶然发现了另一个问题 I want to achieve something similar to this 我想使用 RDFList 来执行此操作 将必要的属性添加到列表中 然后调用方法 createUnionClass 或 creat
  • CImg 与 jpeglib

    我试图让 CImg 与 Visual Studio 2017 和 jpeg 9b 一起使用 但由于某种原因它不能使用 Code define cimg use jpeg include CImg CImg h using namespace
  • 如何使用 Power BI DAX 从移动表计算每天的库存?

    我有一张库存变动表 每个库存项目都有一个唯一的 ID 并且它们会随着时间的推移更改状态 假设状态 A B C 和 D 但并不总是按此顺序 ID的每次状态变化都是表中的一条新记录 并带有状态变化的时间戳 我的目标是使用 Power BI DA
  • AVCaptureSession 仅获取视频缓冲区

    我试图从 iPhone 摄像头捕获视频和音频 并由 avassetwriter 作为视频文件输出 但输出视频文件仅包含带有音频的第一帧 我检查了 AVCaptureSession 委托方法 void captureOutput AVCapt
  • 导出机器学习模型

    我正在创建一个机器学习算法并想将其导出 假设我正在使用 scikit learn 库和随机森林算法 modelC RandomForestClassifier n estimators 30 m modelC fit trainvec yv
  • 如何从 javascript 函数调用方法后面的代码?

    我有一个 javascript 函数 用于 aspx 页面中的 HTML img 点击事件 其代码隐藏页面中还有一个服务器方法 现在我想仅当用户单击 HTML img 时才从 javascript 函数调用服务器方法而不带任何参数 C 代码
  • 隐藏 ViewController 后实例化按钮不起作用

    我刚刚发现这个非常奇怪的问题 我有这个button这是触发这个function objc func vergessenTapped let forgotPasswordVC self storyboard instantiateViewCo
  • 查找具有 n 个元素的表的最佳列和行大小以及其比例的给定范围

    我正在寻找一种从 n 个元素创建表格的最佳方法 以便理想情况下没有空单元格 但同时表格尺寸列 行的比例变得尽可能接近 1 当然 如果 n 是平方数 那么就很容易 cols rows sqrt n 如果 n 是素数 那么很明显会有空单元格 所
  • 在 Github 操作中获取修改后的文件

    我的存储库中有 2 个 Github Actions 工作流程 其中一个步骤需要获取 PR 中已修改的所有文件 删除的文件除外 我在第一个中使用这个 on pull request branches main jobs get files