![应用 git-diff 创建的补丁文件](https://linux22.com/image/110447/%E5%BA%94%E7%94%A8%20git-diff%20%E5%88%9B%E5%BB%BA%E7%9A%84%E8%A1%A5%E4%B8%81%E6%96%87%E4%BB%B6.png)
我已经完成了 git-diff 来生成补丁文件:
cd
git diff --no-prefix ~/.vim/bundle/vim-latex-suite/ftplugin/latex-suite/compiler.vim ~/compiler.vim > ~/vimlatex.patch
生成的补丁是
diff --git home/rudra/.vim/bundle/vim-latex-suite/ftplugin/latex-suite/compiler.vim home/rudra/compiler.vim
index 65cd33a..abfcff7 100644
--- home/rudra/.vim/bundle/vim-latex-suite/ftplugin/latex-suite/compiler.vim
+++ home/rudra/compiler.vim
@@ -434,7 +434,8 @@ function! Tex_ForwardSearchLaTeX()
else
" We must be using a generic UNIX viewer
" syntax is: viewer TARGET_FILE LINE_NUMBER SOURCE_FILE
-
+ let mainfnameRelative = fnameescape(fnamemodify(Tex_GetMainFileName(), ':p:.:r'))
+ let target_file = mainfnameRelative . "." . s:target
let execString .= join([viewer, target_file, linenr, sourcefile])
endif
我想应用这个补丁/home/rudra/.vim/bundle/vim-latex-suite/ftplugin/latex-suite/compiler.vim
但是当我尝试应用补丁时,它给出了:
patch -p0 < vimlatex.patch
can't find file to patch at input line 5
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
--------------------------
|diff --git home/rudra/.vim/bundle/vim-latex-suite/ftplugin/latex-suite/compiler.vim home/rudra/compiler.vim
|index 65cd33a..abfcff7 100644
|--- home/rudra/.vim/bundle/vim-latex-suite/ftplugin/latex-suite/compiler.vim
|+++ home/rudra/compiler.vim
--------------------------
File to patch: /home/rudra/.vim/bundle/vim-latex-suite/ftplugin/latex-suite/compiler.vim
patching file /home/rudra/.vim/bundle/vim-latex-suite/ftplugin/latex-suite/compiler.vim
问题是,虽然它工作正常,但我希望它了解应该修补哪个文件,而不询问我要修补的文件:
我怎样才能做到这一点?
答案1
默认情况下,patch
从目标文件中删除路径,因此您可以使用以下命令应用补丁
patch < vimlatex.patch
compiler.vim
(假设当前目录中有一个文件)。
指定-p0
指示它使用所有目标路径,因此它期望home/rudra/compiler.vim
从当前目录开始找到一个名为的文件。对此的解释是,用于创建补丁的命令在diff
运行之前已被转换;真正用于创建补丁的命令被记录为补丁的第一行(基本上,~
变成/home/rudra
,并且前导/
被删除):
diff --git home/rudra/.vim/bundle/vim-latex-suite/ftplugin/latex-suite/compiler.vim home/rudra/compiler.vim
因此,patch -p0
默认情况下期望找到一个匹配的文件home/rudra/compiler.vim
(目标文件),如上所述。
我认为没有可靠的方法来生成您想要的补丁,因为patch
明确忽略了绝对路径。我建议只使用普通的diff
相对路径:
cd
diff -u .vim/bundle/vim-latex-suite/ftplugin/latex-suite/compiler.vim compiler.vim > vimlatex.patch
并将补丁应用到适当的目录中。