2009-12-08 95 views
2

在CVS中,我的工作副本(WC)位於某個分支(我們稱之爲「foo」)。另一個開發者已將其他更改檢入foo。我想在我的WC和foo的上游狀態之間做一個差異。通常情況下,在後備箱(HEAD)工作時,我只是做一個cvs diff,這很好。但由於某種原因,在分支中執行簡單的cvs diff時,diff是空的。當我嘗試使用「cvs diff -r foo」時,diff顯示出來,但它是反向的 - 上游添加顯示爲小數,上游刪除顯示爲加數。 (1)讓CVS以「另一種方式」(加上上游添加)或(2)反轉補丁(一般情況下)來進行比較?反轉diff或patch || CVS diff

回答

2

如果主要目的是檢查中央回購庫中的「最新情況」,我建議您自己定製一個功能強大的CVS查看器/瀏覽器/網絡通道,您可以在更新之前瀏覽並查看最新更改。但是,假設你已經是命令行CVS,我會嘗試反正給你解決:)

所以,你在這裏買到的分支fooA去 - >B,其中B是狀態分支(在服務器上)在其他開發人員簽入後,A是您上次更新工作副本的狀態。

如果只是做在這種情況下一個普通的cvs diff,你會看到你的本地修改相比A因爲A是你查了一下了。本地CVS狀態將顯示每個文件來自foo分支上的A修訂版,並且在區分CVS客戶端時將從服務器下載該修訂版。在你的情況下,我猜你沒有本地變化,因爲你的cvs diff是空的。

然後,當你做你的版本比較本地A(或A +的變化)對服務器的foo(目前是B)一cvs diff -r foo - 從服務器的B讓需要你的A+changes是變化與其他開發人員的簽入完全相反,加上您自己的本地更改。現在,如果你真的很想知道B(或者tip-of-foo)與A(你目前檢查出的任何一個原始版本)的比較情況,我認爲你必須設置一個標籤在您的工作副本上,然後將該標記與分支狀態進行比較。就像這樣:

cvs tag pistos_temp1 
cvs diff -r pistos_temp1 -r foo 
# And clean up by deleting the tag afterwards: 
cvs tag -d pistos_temp1 
+0

我們正在使用viewvc,但我們無法真正弄清楚如何使它在分支機構中很好地工作。它只能使用HEAD材質順利運行。 總之,您的臨時標籤解決方案工作得很好,即使它有點笨拙(與非CVS解決方案相比)。謝謝。 – Pistos 2009-12-09 15:33:23

0

您可以嘗試將分支中的文件導出到某個臨時文件,然後在工作副本和此臨時文件之間進行區分。這似乎是最簡單的方法。

+0

這是一種方式,是的,但肯定有一個更好的辦法。 :)我會打電話給這個「計劃C」。 – Pistos 2009-12-08 14:54:15

3

也許你想要的可以通過使用patchutils包中的interdiff來完成。

我經常用這種方式來看看是什麼在樹幹上改變給定文件:

cvs diff -up -r1 givenfile | interdiff /dev/stdin /dev/null 
+0

從'man 1 interdiff': '要反轉一個補丁,請使用/ dev/null作爲diff2。' 這有幫助,謝謝。 :) – selurvedu 2016-07-20 00:28:53