5

私はCVSとwin7を使用しています。いくつかの変更をトランクからブランチにコピーする必要があるので、「diff -ruN」を使用して変更をファイルに入れ、「patch-i」を使用してブランチに適用できると思いました。

だから私はこのページこのページを見ました。私はすでにcygwindiffを持っていたので、ここでgnuパッチを入手しました。2つのファイルを作成しました

\test\mydir1\afile.txt
\test\mydir2\afile.txt

わずかな違いがあります。次に入力します

cd test
diff -ruN mydir1 mydir2 >test.patch
patch --dry-run -i test.patch

結果は

can't find file to patch at input line 4
Perhaps you should have used the -p or --strip option?

だから私は試しました

patch --dry-run --verbose -p1 -i test.patch

同じエラーが発生します。私は長い間他の多くのことを試みましたが、成功しませんでした。なんでこんなに難しいの?

4

2 に答える 2

13

ここに私が知る必要がある2つのことがありますが、どこにも文書化されていません

  • diff出力はunix形式を使用しますが、パッチにはdos形式が必要です
  • パッチのデフォルトの「ストリップ」は、予想どおり-p0ではありません。-p1です。

これは動作します...

diff -ruN mydir1 mydir2 | unix2dos > test.patch
patch -p0 -i test.patch

DOS行末に変換する必要があり、-p0を指定する必要があります。それ以外の場合、デフォルトは-p1です。これが他の誰かに役立つことを願っています。

于 2013-03-01T14:06:26.297 に答える
0

それ以来、私は CVS についてより多くのことを学んだので、もう patch は使用しません。ある CVS ブランチから別のブランチに特定の変更をコピーしたい場合は、CVS UPDATE -j -jで実行できます。たとえば、HEAD の file1.cpp を 1.45 から 1.46 に変更するとします。ブランチに移動して入力できます

cvs update -kk -j 1.45 -j 1.46 file1.cpp

指定された変更をHEADからブランチにコピーします。

多くのファイルから変更をコピーしたい場合は、cvs rtag を使用して日付 (など) に基づいてタグを作成し、更新でタグを使用できます。

cvs update -kk -j tagBeforeChange -j tagAfterChange
于 2013-10-18T14:42:15.653 に答える