aplicando un archivo de parche creado por git-diff

aplicando un archivo de parche creado por git-diff

Hice un git-diff para generar un archivo de parche:

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

El parche resultante es

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

Quiero aplicar este parche a/home/rudra/.vim/bundle/vim-latex-suite/ftplugin/latex-suite/compiler.vim

Pero cuando intento aplicar el parche, aparece:

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

El problema es que, si bien funciona bien, quiero que sepa qué archivo debe parchear, sin preguntarme.Archivo para parchear:

¿Cómo puedo lograr esto?

Respuesta1

De forma predeterminada, patchelimina las rutas de los archivos de destino, para que pueda aplicar el parche usando

patch < vimlatex.patch

(suponiendo que haya un compiler.vimarchivo en el directorio actual).

La especificación -p0le indica que utilice toda la ruta de destino, por lo que espera encontrar un archivo llamado home/rudra/compiler.vima partir del directorio actual. La explicación para esto es que el comando que usó para crear el parche se transformó antes de diffejecutarlo; el comando realmente utilizado para crear el parche se registra como la primera línea del parche (básicamente, ~se convierte en /home/rudray /se elimina el interlineado):

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

Como resultado, patch -p0de forma predeterminada espera encontrar un archivo que coincida home/rudra/compiler.vim(el archivo de destino) como se explicó anteriormente.

No creo que haya una manera confiable de producir el tipo de parche que buscas, porque patchignora explícitamente las rutas absolutas. Recomiendo simplemente usar simple diffcon rutas relativas:

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

y aplicar el parche en el directorio apropiado.

información relacionada