2012-05-18 70 views
0

我需要一種自動方式將一行添加到配置文件。我用diff創建了一個.diff文件,我想用patch來申請。但是,可能發生的情況是,我需要修補的文件在其他地方稍有修改。例如。在配置文件的其他地方添加了一些其他行。補丁對diff文件過於嚴格

我認爲patch實際上對此會很聰明,並確定該補丁是否仍然可以無衝突地應用,但是當我嘗試將補丁應用於配置文件時出現錯誤,該配置文件與原始文件。

是否有任何額外的標記需要傳遞給patchdiff以使其不那麼嚴格?我生成使用

diff -ruN oldfile.conf newfile.conf > mypatch.diff 

然後是爲.diff文件應用於使用

patch myconfig.conf mypatch.diff 

我想的是,patch將嘗試相當寬鬆應用補丁的補丁程序,如果它不知道如何,只是返回一個警告,但不是一個錯誤。目前,我看到這些錯誤:

[email protected]:~/Desktop$ diff -ruN default.conf default_new.conf > mypatch.diff 
[email protected]:~/Desktop$ patch default2.conf mypatch.diff 
patching file default2.conf 
Hunk #1 FAILED at 28. 
1 out of 1 hunk FAILED -- saving rejects to file default2.conf.rej 
[email protected]:~/Desktop$ 
+0

你實際得到了什麼錯誤? – ravi

+0

Hunk#1 FAILED at ... – Jeroen

+0

如果你只想添加一行,爲什麼不寫一個簡單的腳本來添加一行? – m0skit0

回答

2

我認爲補丁實際上是聰明這一點,並找出如果補丁仍然沒有衝突被應用,但每當我嘗試申請,我得到一個錯誤一個配置文件的補丁與原始文件略有不同。

其實,這成立。但是,這很大程度上取決於您的定義「略有不同」。基本上,變化需要遠離修補程序修改的地方。

你可以嘗試調用補丁與-F參數

-F NUM或--fuzz = NUM​​

設置最大模糊因數。此選項僅適用於具有上下文的差異,並且導致修補程序忽略多行文本以查找安裝塊的位置。請注意,較大的模糊係數會增加錯誤修補程序的機率。默認的模糊fac- tor是2.模糊係數大於或等於上下文diff中的上下文行數,通常爲3,忽略所有上下文。

但我不會建議。

如果你只是想

自動化的方式添加一行到配置文件

你考慮使用perlawked的工作嗎?我不認爲patch是正確的工具。

+0

有沒有簡單的方法讓補丁不會返回錯誤,如果它不工作? – Jeroen

+0

@Jeroen:你的意思是「補丁......」 TRUE'? – jpalecek

+0

在shell腳本中工作嗎? – Jeroen