aplicando um arquivo de patch criado por git-diff

aplicando um arquivo de patch criado por git-diff

Eu fiz um git-diff para gerar um arquivo de patch:

cd
git diff --no-prefix ~/.vim/bundle/vim-latex-suite/ftplugin/latex-suite/compiler.vim  ~/compiler.vim > ~/vimlatex.patch

A mancha resultante é

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

Eu quero aplicar este patch para/home/rudra/.vim/bundle/vim-latex-suite/ftplugin/latex-suite/compiler.vim

Mas quando estou tentando aplicar o patch, ele dá:

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

O problema é que, embora esteja funcionando bem, quero entender qual arquivo deve corrigir, sem me perguntarArquivo para corrigir:

Como posso conseguir isso?

Responder1

Por padrão, patchremove os caminhos dos arquivos de destino, para que você possa aplicar seu patch usando

patch < vimlatex.patch

(assumindo que haja um compiler.vimarquivo no diretório atual).

A especificação -p0o instrui a usar todo o caminho de destino, portanto, ele espera encontrar um arquivo chamado home/rudra/compiler.vima partir do diretório atual. A explicação para isso é que o comando que você usou para criar o patch foi transformado antes de diffser executado; o comando realmente usado para criar o patch é registrado como a primeira linha do patch (basicamente, ~torna-se /home/rudra, e o início /é removido):

diff --git home/rudra/.vim/bundle/vim-latex-suite/ftplugin/latex-suite/compiler.vim home/rudra/compiler.vim

Como resultado, patch -p0por padrão espera encontrar um arquivo correspondente home/rudra/compiler.vim(o arquivo de destino) conforme explicado acima.

Não acho que exista uma maneira confiável de produzir o tipo de patch que você procura, porque patchignora explicitamente os caminhos absolutos. Eu recomendo apenas usar plain diffcom caminhos relativos:

cd
diff -u .vim/bundle/vim-latex-suite/ftplugin/latex-suite/compiler.vim  compiler.vim > vimlatex.patch

e aplicando o patch no diretório apropriado.

informação relacionada