应用 git-diff 创建的补丁文件

应用 git-diff 创建的补丁文件

我已经完成了 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

并将补丁应用到适当的目录中。

相关内容