2012-01-01 89 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 

在這種情況下,diff會忽略內anewdirectory/文件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 2012-01-01 02:00:45

+0

當然。感謝您的支持。 – katyhuff 2012-01-01 02:03:32

1

如果diff -r不按手冊頁中的描述工作,則顯然已損壞;不過,我會使用原始代碼創建一個本地版本控制庫,然後,一旦你犯了這個錯誤,就提交新的代碼。任何值得使用的版本控制系統都將能夠在已提交版本之間創建一個補丁。

+0

謝謝,我想知道有關...但試圖讓生活簡單;) – Onyx 2012-01-01 01:18:57

0

我假設原始項目是在一些版本的源代碼管理下。如果是這樣,那麼應該爲該源代碼管理系統建立好的工具,它可以讓你創建一個補丁。例如,如果源代碼管理系統是Subversion(SVN),並且您在Windows上,則可以使用TortoiseSVN構建該修補程序。

不要重新發明輪子。

+0

在Aptosid Linux操作系統。但是會像小次郎所說的那樣做,並且設置GIT,拖動原來的,然後是新的代碼。 – Onyx 2012-01-01 01:20:35