首页 > 解决方案 > git apply --check file.patch 先进入`/`

问题描述

我正在尝试将自己创建的补丁应用到项目中。所以我做了以下命令:

diff -ru src /mnt/windows/Programming/pull_requests/himalaya/src > file.patch

现在这些是中的第一行file.patch

diff --color -ru src/config/tui/tui.rs /mnt/windows/Programming/pull_requests/himalaya/src/config/tui/tui.rs
--- src/config/tui/tui.rs   2021-06-07 20:50:19.398724000 +0200
+++ /mnt/windows/Programming/pull_requests/himalaya/src/config/tui/tui.rs   2021-07-07 10:06:40.787428476 +0200

现在,如果我这样做git apply --check file.patch,我会得到这个:

error: mnt/windows/Programming/pull_requests/himalaya/src/config/tui/tui.rs: No such file or directory

如您所见,第一个/缺少/mnt. 为什么呢?为什么不正确?补丁对我来说看起来不错。

暗示

我在linux上,windows只是一个目录名。

标签: gitpathdiff

解决方案


如果您真的希望 git 检查描述将您的 repo 文件移动到 repo 之外的路径的内容,请尝试--unsafe-paths选项,并添加-p 0以保留前导斜杠。

恕我直言:如果您的目的只是检查补丁是否可以正确应用于您的本地src/config/tui/tui.rs文件,您最好手动编辑补丁,从第 3 行删除绝对前缀:

+++ src/config/tui/tui.rs   2021-07-07 10:06:40.787428476 +0200

option的文档--unsafe-paths说明了您的补丁被拒绝的原因:

--不安全路径

默认情况下,影响工作区域之外的补丁(Git 控制的工作树,或者当“git apply”用作 GNU 补丁的替换时的当前工作目录)被视为错误(或恶作剧)被拒绝。

git apply用作“更好的 GNU 补丁”时,用户可以通过--unsafe-paths选项来覆盖此安全检查。--index此选项在使用时或--cached正在使用时无效。


推荐阅读