Anwenden einer von git-diff erstellten Patchdatei

Anwenden einer von git-diff erstellten Patchdatei

Ich habe ein Git-Diff durchgeführt, um eine Patch-Datei zu generieren:

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

Der resultierende Patch ist

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

Ich möchte diesen Patch anwenden auf/home/rudra/.vim/bundle/vim-latex-suite/ftplugin/latex-suite/compiler.vim

Aber wenn ich versuche, den Patch anzuwenden, wird Folgendes angezeigt:

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

Das Problem ist, dass es zwar einwandfrei funktioniert, ich aber möchte, dass es versteht, welche Datei es patchen soll, ohne mich zu fragenZu patchende Datei:

Wie kann ich das erreichen?

Antwort1

Standardmäßig patchwerden Pfade aus den Zieldateien entfernt, sodass Sie Ihren Patch mit

patch < vimlatex.patch

(vorausgesetzt, es befindet sich eine compiler.vimDatei im aktuellen Verzeichnis).

Die Angabe -p0weist das Programm an, den gesamten Zielpfad zu verwenden, sodass es erwartet, eine Datei namens zu finden, die home/rudra/compiler.vimvom aktuellen Verzeichnis aus beginnt. Die Erklärung dafür ist, dass der Befehl, den Sie zum Erstellen des Patches verwendet haben, vor diffder Ausführung umgewandelt wurde. Der tatsächlich zum Erstellen des Patches verwendete Befehl wird als erste Zeile des Patches aufgezeichnet (im Grunde ~wird daraus /home/rudra, und der führende Teil /wird entfernt):

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

Als Ergebnis patch -p0wird standardmäßig erwartet, eine passende Datei home/rudra/compiler.vim(die Zieldatei) zu finden, wie oben erläutert.

Ich glaube nicht, dass es eine zuverlässige Methode gibt, den Patch zu erstellen, den Sie suchen, da patchabsolute Pfade explizit ignoriert werden. Ich würde empfehlen, einfach plain diffmit relativen Pfaden zu verwenden:

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

und wenden Sie den Patch im entsprechenden Verzeichnis an.

verwandte Informationen