【问题标题】:How to apply all git .patch files from /patches folder - npm如何应用 /patches 文件夹中的所有 git .patch 文件 - npm
【发布时间】:2018-09-28 11:47:45
【问题描述】:

TL、DR;

我正在寻找一个 git 命令、bash 脚本或 npm 方法(脚本)来获取文件夹中的所有 .patch 文件并运行

git apply --ignore-whitespace patches/{filename}

到目前为止我已经尝试过:

git am --ignore-whitespace patches/*.patch

上下文(我会用它做什么)

目前正在处理一个大型项目,使用相当多的库。我们使用 webpack,前端是 Angular.js,后端是 Yii2。因为开发者同时使用 linux 和 windows,所以项目是在 docker 镜像中编译的。

到目前为止,每当我们需要对库进行更改时,我们都会对其进行分叉并在 package.json 中指定分叉:

"package-name":"git+https://github.com/{git-user}/{package-name}"

而且...它有效。

我最近发现了一种可以说是对模块应用补丁的更好方法,即patch-package。简而言之,它避免了分叉,将更改保存在.patch 文件中。

但是,创建补丁文件是不够的。在部署时,还需要在构建之前应用它。在部署脚本中转换为以下行:

docker exec -it {container-name} bash -c "git apply --ignore-whitespace patches/{package-name}+{package-version}.patch"

它必须在运行 npm run build 之前运行。

而且,它再次起作用。


问题

我正在寻找一种方法来自动获取 patches/ 文件夹中的每个文件并应用它们,不必一个一个地指定它们。因此,每当在补丁文件夹中推送新的.patch(或修改现有的)时,它都会在构建之前自动应用于包,而无需更改部署脚本。

我找到了this question,这似乎暗示了

git am --ignore-whitespace patches/*.patch

可能会成功(当然是在 docker 控制台内)。但是,git-am 上的 man 页面说:

从邮箱应用一系列补丁

什么邮箱?我想应用文件夹中的更改。尝试am 命令,控制台抱怨不知道我是谁(想要电子邮件和密码)。

我是否需要将其视为创建 bash 脚本(.sh 文件)、从文件夹中读取所有文件并在 for 中运行多个 git apply 命令的简单案例?

有没有更“git”的方式/命令?
使用 npm 脚本执行此操作是否更有意义?

【问题讨论】:

    标签: git npm-scripts git-patch patch-package


    【解决方案1】:

    git am 可能有效,但对我来说,它抱怨它无法确定补丁的格式,大概是因为它用于应用邮件中的补丁。

    为什么不直接使用git apply

    而不是这个:

    git am --ignore-whitespace patches/*.patch
    

    这样做:

    git apply --ignore-whitespace patches/*.patch
    

    【讨论】:

    • 你说得对,我应该认为这可能有效。我一到电脑就试试。事实上,我认为它不会起作用,因为我发现了关于它的另一个问题。谢谢。
    • 因为只有 .patch 文件会进入该文件夹(至少在 unix 系统上 - 你永远不知道 Windows 何时添加 desktop.ini :D)git apply --ignore-whitespace patches/* 也可以工作。但是使用.patch 会更安全。
    【解决方案2】:

    这对我有用。

    cat ./patches/*patch | git am

    它将补丁文件的内容提供给git am 命令。

    【讨论】:

      猜你喜欢
      • 2019-11-25
      • 1970-01-01
      • 2015-08-12
      • 2018-07-02
      • 2011-01-25
      • 2017-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多