git-diff によって作成されたパッチファイルを適用する

git-diff によって作成されたパッチファイルを適用する

パッチファイルを生成するために git-diff を実行しました:

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

結果として得られるパッチは

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

このパッチを適用したい/home/rudra/.vim/bundle/vim-latex-suite/ftplugin/latex-suite/compiler.vim

しかし、パッチを適用しようとすると、次のメッセージが表示されます。

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

問題は、正常に動作しているにもかかわらず、どのファイルにパッチを適用すべきかを私に尋ねることなく理解してほしいということです。パッチするファイル:

どうすればこれを達成できるでしょうか?

答え1

デフォルトでは、patchターゲットファイルからパスを削除するので、次のようにパッチを適用できます。

patch < vimlatex.patch

compiler.vim(現在のディレクトリにファイルがあると仮定します)。

を指定すると、-p0すべてのターゲット パスを使用するように指示されるため、home/rudra/compiler.vim現在のディレクトリから というファイルを検索することになります。これは、diffが実行される前に、パッチの作成に使用したコマンドが変換されたためです。パッチの作成に実際に使用したコマンドは、パッチの最初の行として記録されます (基本的に、~が になり/home/rudra、先頭/が削除されます)。

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

その結果、patch -p0デフォルトでは、上で説明したように一致するファイルhome/rudra/compiler.vim(ターゲット ファイル) が見つかるものと予想されます。

絶対パスを明示的に無視するため、必要な種類のパッチを確実に生成する方法はないと思います。相対パスでpatchプレーンを使用することをお勧めします。diff

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

適切なディレクトリにパッチを適用します。

関連情報