【问题标题】:Applying a patch file in a powershell script在 powershell 脚本中应用补丁文件
【发布时间】:2023-03-24 04:54:01
【问题描述】:

我正在尝试通过 Powershell 脚本自动在我的 Win 机器上构建一些依赖项。我只是从 Github 获取源代码,通过 CMake 等进行构建。对于其中一个依赖项,我需要从拉取请求中应用补丁。

在我的脚本中,我正在自动创建asm.patch 文件。这是正确的补丁文件。如果我通过patch < asm.patch 在 Unix 环境中应用这个补丁,一切正常。不过,我无法在我的 Powershell 脚本上应用这个补丁文件。

我试过的东西,我安装了patch的GnuWin32本机端口。在我的脚本中,我将其称为 patch -i asm.patch,因为 Powershell 不允许我使用令牌 <。它正确调用补丁命令。但是 GnuWin32 补丁端口会打开一个与权限相关的对话框。所以它对我的自动化需求没有用处。

问题是,在 Powershell 脚本上应用 .patch 文件的标准方法是什么?

【问题讨论】:

  • 查看Get-Command -Name '*update*' | Where-Object { $_.CommandType -eq 'Function' } 命令的输出。在您有问题中的一些代码之前,请在superuser.com 上提问

标签: powershell


【解决方案1】:

git apply 最终成功了

我正在使用 git 'ignored' 文件夹中的临时 generated project。该补丁面向临时项目的文件夹,但由于周围的 git 项目,我得到的只是Skipped patch

使用git init <TEMP_PROJECT_FOLDER> 允许应用补丁,尽管这对您来说可能不是必需的。

其他提示:

  • --directory 导致 error: invalid path 因为 PowerShell 在路径中对 / 的容忍度只是肤浅的(我收集)。所以需要更改当前工作目录
  • --verbose 有帮助,但并不全面
  • @Moerwald 的其他选项:--ignore-space-change --ignore-whitespace --whitespace=nowarn

【讨论】:

    【解决方案2】:

    git apply 是替代品吗?如果是这样,请尝试:

      invoke-expression "git apply --ignore-space-change --ignore-whitespace --whitespace=no warn file.patch
    

    【讨论】:

    • 这对我不起作用。尝试使用--directory 时导致error: invalid path。通过设置当前目录来避免--directory 无济于事;每个补丁都会收到消息Skipped patch。但是,我的 IDE 可以很好地应用补丁。另见similar question
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-23
    • 2011-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多