2012-01-01 9 views
4

私はLinux上でPHPプロジェクトをフォークしています。最新のペアレンタルコードに適用できる作業のパッチファイルを作成したいと思います。元のフォルダと新しいコードフォルダの両方が深い(再帰的に必要な)多くのサブディレクトリです。私はいくつかの理由 diffを使って再帰的にパッチファイルを作成する方法

diff -ur folder1 folder2 > newcode.patch 

私は新しいファイルをすべて含むパッチファイルを取得するために管理していない、そしてそれはより深いファイルの変更の一部が含まれていません(約3レベル以上)。

どのようにすればいいですか?私はMeldとKdiff3を見ました...しかし、私はどちらかをしたいとは思わない。

答えて

9

:この場合

folder1/ 
    text.txt 
    level1/ 
    text1.txt 
    level2/ 
     text2.txt 
     level3/ 
     text3.txt 

folder2 
    text.txt 
    level1/ 
    text1.txt 
    level2/ 
     text2.txt 
     anewdirectory/ 
     newtext.txt 
     level3/ 
     text3.txt 
     newfiled3.txt 

を、diffanewdirectory/内のファイルnewtext.txtを無視します。また、おそらくnewfiled3.txtのテキストも受け取っていないでしょう。代わりに、次のような報告があります:

.. 
Only in folder2/level1/level2/ : anewdirectory 
Only in folder2/level1/level2/level3/ : newfiled3.txt 
.. 

これはあなたが見ている症状ですか?
試してみてください。

diff -urBNs folder1/ folder2/ > code.patch 
+0

AHA!私は-urBNsで試してみました...しかし答えはあなたの例が使用するフォルダ名の後ろにあるスラッシュにあります!ありがとうKatyhuff ++ – Onyx

+0

確かに。 upvoteありがとう。 – katyhuff

1

diff -rがマニュアルページに記載されているように動作していない場合は、明らかに壊れています。しかし、元のコードを使用してローカルのバージョン管理リポジトリを作成し、コミットしたら新しいコードをコミットします。塩の価値のあるバージョン管理システムは、コミットされたバージョン間でパッチを作成できます。

+0

おかげで、私はそのことについて疑問に思った...しかし、単純な生活を維持しようとしていた;) – Onyx

0

元のプロジェクトがソース管理のいくつかのバージョンの下にあると仮定しています。もしそうなら、パッチを作成するためのソース管理システム用に構築された良いツールが必要です。たとえば、ソース管理システムがSubversion(SVN)で、Windows上にいる場合は、TortoiseSVNを使用してそのパッチをビルドできます。

ホイールを改造しないでください。私はあなたのようなものだディレクトリ構造を有する疑いがある

+0

aptosidのLinuxの場合。しかし、コウジロが示唆しているように、そしてGITを設定して元のコードにドラッグし、新しいコードをドラッグします。 – Onyx

関連する問題