我们正在使用git存储库。存储库中有一个带有外部依赖项的子目录dependencies/
(例如.c
和.h
文件)。该子目录不受源代码控制(在.gitignore
中列出)。
我想在预构建阶段自动在此子目录中修补.c
文件。
要生成补丁,请执行以下步骤:
dependencies/orig/file.c
dependencies/file.c
git diff --no-index ./orig/file.c file.c > mypatch.patch
然后,我手动修改补丁文件,使其不包含./orig
子目录(以便a
和b
相同)。接下来,恢复原始file.c
并删除./orig
。
要将修补程序应用于原始文件:
>git apply mypatch.patch --verbose
该命令是静默的。但是,将文件复制到不在git存储库中的目录时,它可以工作:
>git apply mypatch.patch --verbose
Checking patch file.c...
Applied patch file.c cleanly.
补丁文件本身还可以。我不了解这种行为。我找不到一个开关,git apply
会忽略我在git仓库中的事实。
使用patch
时,它也可以在存储库中使用:
$ patch < mypatch.patch
patching file file.c
不幸的是,我无法在Windows下使用patch
,只能在Git bash(使用MinGW)中使用它。
最好的问候, 马赛厄斯