Use*_*ser 2 windows patch batch-file
我有一个目录包含几个要修改的文件。我没有手动进行更改(因为文件太多),而是下载了一个 diff 文件(由其他用户制作),这个 diff 文件由 .bat 文件执行。
让我让它更系统。
WinDDK_7600.16385.1_patch.bat这个文件的路径是( C:\Users\kunze\Documents\Visual Studio 2010\Projects\busmaster-master\Documents\1 Development Environment\files)这个文件的内容是
@echo on
set PATH=%PATH%;%ProgramFiles%\Git\bin
patch -p1 -d C:/ < WinDDK_7600.16385.1.diff
pause
Run Code Online (Sandbox Code Playgroud)
当我运行 bat 文件时,它将运行,WinDDK_7600.16385.1.diff并且此差异文件对 .bat 中的许多文件进行了更改C:\WinDDK。这个文件的路径是C:\Users\kunze\Documents\Visual Studio 2010\Projects\busmaster-master\Documents\1 Development Environment\files
需要更新差异的文件位于此目录中 C:\WinDDK
我已经为 git/bin 设置了路径环境变量
有人可以让我知道我应该在我的WinDDK_7600.16385.1_patch.bat 文件中进行哪些更改, 以便它可以找到并更新位于C:\WinDDK目录中的所有文件
我试了好几次,每次都出现这个错误"Assertion failed: hunk, file ../patch-2.5.9-src/patch.c, line 354"?有什么问题吗?
.diff文件、patch工具及其与 Git 的相关性首先,这个问题与Git无关。Git for Windows,你应该已经安装在你的计算机上,只是碰巧附带了 Windows 端口patch-一个应用特殊格式文件描述的更改的程序。具体来说,GfW 包括GNU 补丁程序。
patch.exeGfW 提供的程序位于%ProgramFiles%\Git\bin(除非您覆盖了安装位置)。
.diff文件包含什么以及如何patch工作引用上面链接的维基百科文章,差异文件如下所示:
--- /path/to/original ''timestamp''
+++ /path/to/new ''timestamp''
@@ -1,3 +1,9 @@
+This is an important
+notice! It should
+therefore be located at
+the beginning of this
+document!
+
This part of the
document has stayed the
same from version to
@@ -5,16 +11,10 @@
be shown if it doesn't
change. Otherwise, that
would not be helping to
-compress the size of the
-changes.
-
-This paragraph contains
-text that is outdated.
-It will be deleted in the
-near future.
+compress anything.
It is important to spell
-check this dokument. On
+check this document. On
the other hand, a
misspelled word isn't
the end of the world.
Run Code Online (Sandbox Code Playgroud)
这是我们在这里的内容:
该@@ ... @@块划“帅哥”,描述那里的原始文件通过这个大块头的一块变化所在,它最初多少行包含,它会多少打补丁后包含的内容。
关于大块的下一个(也是最重要的)事情是改变标志:+分别表示添加的行,-表示已删除线,而前缀线(单个空格字符)不改变,并提供上下文的patch工具,能够执行“模糊匹配” ——不仅基于行数,还基于实际文件内容。
patch工具的工作原理该patch工具获取.diff文件并
读取第一个大块,在它找到的文件中定位它,并应用大块中的补丁。
如果修补大块失败,则patch创建一个特殊的“拒绝”文件(通过组合它尝试修补的文件的尾名加上.rej扩展名)并将失败的大块写入那里。
转到下一个大块并重复,直到找到新标头的补丁文件末尾。
如果找到下一个头,则重复从(2)开始的步骤,否则退出。
patch工具如何定位要修补的文件大多数情况下,补丁文件中的标头包含相对路径名(如foo/bar/baz.c),该patch工具如下所示:
两个命令行选项会影响patch工具的行为:
-d <dir>选项告诉它<dir>在执行工作之前将其当前目录更改为。该-p N选项告诉它N在进一步考虑之前从头中提取的路径名中修剪路径组件。
这意味着-p1通过传递给它,patch将在尝试定位该文件之前转换foo/bar/baz.c为bar/baz.c。
到现在为止,您应该能够完全理解您的批处理文件的作用,我要求您解决这个问题,不要再考虑所有这些黑巫毒。
patch工具中的“断言失败”错误我的猜测是您遇到了一个不幸的错误,该错误偶尔会出现在各种 Windows 端口中——EOL 标记的patch问题:该工具只是在+序列上窒息。CRLF
解决此问题的可能方法:
git apply按照此处的说明进行尝试——Git 不使用patch.exe而是使用它自己的机器,GfW 搬运工教它可以与 Windows EOL 正常工作。尝试其他端口patch,例如来自 GnuWin32 项目的这个端口。
请注意,您可能会遇到一些 UAC 问题;这是修复它的方法。
| 归档时间: |
|
| 查看次数: |
2576 次 |
| 最近记录: |