在Powershell脚本中应用补丁文件

时间:2019-06-29 15:37:47

标签: powershell

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

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

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

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

2 个答案:

答案 0 :(得分:0)

git apply是否可以替代?如果是这样,请尝试:

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

答案 1 :(得分:0)

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