2008-12-22 18 views
2

這裏是問題:我們已經完成了顛覆項目的所有開發,但是我們的測試版本只是輸出文件的一小部分,並不都是同時放在那裏的。換言之,我們對版本化文件進行了更改,然後當我們認爲我們很高興時,我們通過將它們複製到不同的目錄來手動導出它們。可以將舊的導出文件集與一個Subversion存儲庫進行比較嗎?

好了,我們希望有由Subversion管理的所有作品,與測試版爲軀幹的頭一個簡單的工作副本。我知道我可以從頭部開始,只需回滾特定區域,直到達到相同的文件,但能夠知道每個文件需要回滾到哪個版本會很高興。

請問這樣的工具,將採取一系列文件/目錄,並把它比作一個倉庫,使版本號爲每個文件/目錄,存在嗎?如果不是,我怎麼會把腳本放在一起來做到這一點?

回答

1

我同情你的問題,但這是一個問題,你將不得不以不同的方式解決未來。

Subversion有一個「目錄副本」的概念,它是輕量級的,根本不佔用存儲庫中的太多空間。

通常情況下,如果你使用標籤/分支機構/樹幹經常使用的佈局,那麼你將你的主幹副本到您的代碼目錄的新的子文件夾,當你釋放的東西。

這樣你就不需要試圖找出每個文件在事後的版本,Subversion會爲你跟蹤它。

這是非常喜歡說:「我知道我開着車到石頭牆,但你可以請幫我把車開回來在一起嗎?」。答案當然是避免開始時進入巖壁。

據我所知,在Subversion中沒有函數會告訴你每個文件的哪個版本是你的磁盤上的文件,所以你要麼製作一些腳本來測試每個文件的版本,或者你手動完成。

哦,是的,避免將來駛入那堵巖壁。

0

啊,是的! 「Frankenversions」!

這是我會建議構建管理系統,如CruiseControlHudson。這些系統將爲他們所做的每個構建創建一個標記(複製),因此您可以確信,與您的某個構建對應的所有內容都是一致的版本。

我喜歡將代碼添加到我的構建腳本,甚至採取從CruiseControl的版本號,並把它們放到我的建立(如我的「約」的文件,我的程序集元數據等)。這將使您可以輕鬆地將您的實際工作軟件與svn中的內容進行交叉引用。

+0

是的,我同意......並且我們會轉向那個,但這並不能解決我的問題。一旦我達到這一點,它不再是一個問題!現在,它不是什麼「frankenversions」,因爲它是非版本,希望他們是真正的男孩! – cdeszaq 2008-12-22 23:13:33

+0

那麼,你如何*知道*如果你沒有在適當的地方有標籤他們不frankenversions ;-)?複製你的版本,並拒絕非管理員修改它們的權利。然後實現一個構建系統,即使它所做的只是標記。 – 2008-12-22 23:27:54

0

您可以嘗試使用SharpSvn編寫一個工具來執行此操作。您的挑戰是找出與您的文件相對應的存儲庫url。之後,您可以獲取日誌以及該文件日誌調用差異的每個修訂版,以驗證它是否不同。

同樣,我認爲你必須要解決的最大問題是找到Subversion的URL爲每個文件

0

我想擴大Sander的回答以上,並貫徹到底。

使用遵循以下算法的SharpSvn庫創建一個工具。

FOR EACH of the exported files 
    ITERATE backwards through the revisions of that file 
    IF the revisioned file matches your exported copy 
    SVN COPY that revisioned file to another branch 

一旦你完成了所有的文件,你的新分支應該有你的導出版本的工作副本。這很麻煩,但它應該讓你在你需要的地方。

0

忘記SharpSVN,還有perl和python綁定也可以工作,或者你可以在bash中使用svn命令行。畢竟你說過劇本。

如果使用命令行,則需要在目錄樹中搜索等效文件,然後使用svn log命令獲取單個文件的修訂號列表;您還需要svn diff命令(使用-r選項)將您的文件與repo中的修訂版進行比較。

我會打印出所有匹配的路徑和修訂版本號並手動整理它(以防萬一您有重複!),但是您希望svn cp命令使受控文件的分支成爲新的目錄。

相關問題