
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, patch
remove os caminhos dos arquivos de destino, para que você possa aplicar seu patch usando
patch < vimlatex.patch
(assumindo que haja um compiler.vim
arquivo no diretório atual).
A especificação -p0
o instrui a usar todo o caminho de destino, portanto, ele espera encontrar um arquivo chamado home/rudra/compiler.vim
a partir do diretório atual. A explicação para isso é que o comando que você usou para criar o patch foi transformado antes de diff
ser 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 -p0
por 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 patch
ignora explicitamente os caminhos absolutos. Eu recomendo apenas usar plain diff
com 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.