2008-10-01 39 views
18

我對使用Subversion作爲其源代碼控制的開源項目進行了一些本地更改。 (我沒有對原始項目存儲庫的提交訪問權。)subversion diff包含新文件

我的更改添加了一個文件,但是此文件未包含在「svn diff」的輸出中。 (可能值得注意的是,新文件是二進制文件,而不是純文本。)

如何製作包含新文件的patch


$ svn st 
    A  tests/foo.zip 
$ svn diff 
$ 
+4

我在回答這個問題很感興趣,當文件是*不*二進制文件。 – Glyph 2010-06-01 16:42:49

+0

@Glyph:看看這裏:http://stackoverflow.com/q/4248768/427532 – 2012-02-16 17:13:16

回答

6

事實上,你的文件是二進制的,正是它爲什麼不顯示恐怕。 Subversion的diff命令只執行文本差異/補丁(儘管Subversion內部可以在不同版本之間有效地處理二進制文件差異)。

0

如果你正在構建一個補丁,你可能需要使用普通的老「差異」用它把丟失的文件爲空--new-file選項。

請注意,此選項的語法可能會根據您使用的舊版本的差異版本而有所不同。

12

diff命令有一個--force選項,但它會在我的機器上爲二進制文件生成不正確的補丁文件。使用它與--diff-cmd選項雖然適用於我:

svn diff --force --diff-cmd /usr/bin/diff -x -au 

我認爲這產生了你想要的。

26

我經歷了與Pozsar類似的行爲。而他的回答對我來說比普通的svn diff --force更好。但是,如果在DOS機器上運行(例如通過Cygwin),您可能需要稍微修改他的答案。下面的差異+補丁工作了使用--binary ARG修補我的文字+二進制文件在Cygwin中:

svn diff --force --diff-cmd /usr/bin/diff -x "-au --binary" OLD-URL NEW-URL > mybinarydiff.diff 

patch -p0 --binary -i mybinarydiff.diff