
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 patch
werden Pfade aus den Zieldateien entfernt, sodass Sie Ihren Patch mit
patch < vimlatex.patch
(vorausgesetzt, es befindet sich eine compiler.vim
Datei im aktuellen Verzeichnis).
Die Angabe -p0
weist das Programm an, den gesamten Zielpfad zu verwenden, sodass es erwartet, eine Datei namens zu finden, die home/rudra/compiler.vim
vom aktuellen Verzeichnis aus beginnt. Die Erklärung dafür ist, dass der Befehl, den Sie zum Erstellen des Patches verwendet haben, vor diff
der 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 -p0
wird 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 patch
absolute Pfade explizit ignoriert werden. Ich würde empfehlen, einfach plain diff
mit 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.