如果这是一个愚蠢的问题,我很抱歉,但我想根据文件之间的差异创建一个补丁文件。问题是两个文件位于不同的路径,因为它们具有相同的名称。我运行了以下
git diff ../../../../../../external/freertos/source/include/FreeRTOS.h ../../../../SystemView Patched files/FreeRTOS.h > freertosconf.patch
补丁文件创建得很好,但应用补丁会出错:
error: invalid path '../../../../../../external/freertos/source/include/FreeRTOS.h'
补丁文件的顶部
diff --git a/../../../../../../external/freertos/source/include/FreeRTOS.h b/../../../../SystemView Patched files/FreeRTOS.h
有人看到这里明显的问题吗?
您必须使用">——不安全路径";如果您计划将工作目录留给../../../../,请在git-apply中切换
注意:在git2.4.0版本之后,在使用git-apply的安全性方面进行了调整。
发件人https://github.com/git/git/blob/master/Documentation/RelNotes/2.4.0.txt:
- "git-apply";在阅读、删除、,更新和创建工作树之外的路径(位于--index/--缓存(或当前目录(用作GNU补丁的替换(。(合并e0d201b-jc/apply-obeyond-symlink稍后到maint(
只需复制文件以替换文件并使用git-diff 生成diff
cp ../../../../../../external/freertos/source/include/FreeRTOS.h ../../../../SystemView Patched files/FreeRTOS.h
git diff ../../../../SystemView Patched files/FreeRTOS.h > freertosconf.patch
PS:为什么不在顶级目录中运行以避免./../../../