作爲一名軟件開發人員,我有一個大型項目,其代碼存儲在Subversion®存儲庫中。多年來,我對代碼進行了多次重構,並將其戲弄到由各種組件組成的模塊化體系結構中。一個組件已經成熟到它本身應該是一個獨立的項目。解析`svn log`的輸出,僅列出某個文件歷史記錄的以前版本的路徑
我希望該組件的代碼位於新的獨立Subversion®存儲庫中(可能會被遷移到git
存儲庫中)。但是,我還希望保留該組件中所有文件的版本歷史記錄,以便我可以讀取日誌並提交解釋如何以及爲什麼會以當前格式顯示的消息。
我已經創建了一個現有存儲庫的轉儲,並且希望使用svndumpfilter
來清除轉儲文件中可以導入到新存儲庫(使用svnadmin load
)的所有提交選擇集。
由於svndumpfilter
documentation的倒數第二段建議,我打算使用svndumpfilter
上的include
選項來列出我希望保留在新存儲庫中的路徑。
報價:
這可能是在你的倉庫的生命週期的某個時刻,你可能已經複製從svndumpfilter排除的一些位置的文件或目錄,以它包括的地方。爲了使轉儲數據自給自足,
svndumpfilter
需要仍顯示新路徑的添加(包括由副本創建的任何文件的內容),並且不會將該添加表示爲從您的源中不存在的副本的副本已過濾的轉儲數據流......如果您懷疑在存儲庫中有此類副本,則可能需要重新考慮包含/排除路徑的集合,可能包括用作源的路徑你的麻煩複制操作也是如此。
這意味着,當我們運行通過過濾器的新項目,以維護他們犯下的歷史,我們不僅要include
項目文件在當前的修訂,也include
他們祖先的路徑。
現在的問題是:我們如何確定這些祖先的路徑?
可以在存儲庫url上運行svn log
命令。這將返回其提交歷史記錄。使用--verbose
選項可確保我們可以看到受該歷史記錄中任何給定提交影響的路徑。
當文件被修改時,我們可以忽略occassions。我們真的很感興趣追溯歷史,直到該文件被svn添加到存儲庫。此外,如果使用svn-copy(或任何有效的svn-move)命令添加了該文件,我們也想跟蹤該「源文件」的祖先。
該信息全部在svn log
的輸出中。
--xml
選項以xml格式打印svn log
輸出。這使機器更容易理解它。
我需要的是一些工具或技術,用於從給定存儲庫文件上的svn log
命令輸出的xml流中提取相關的祖先路徑數據。
如果要爲要解壓縮的項目中的每個文件執行此操作,那麼我們可以構建一組需要包含在svndumpfilter
進程中的路徑,以便過濾轉儲文件。
這樣的工具或解決方案是否已經存在?
如果是這樣,我會很感激,如果你能讓我知道這件事。
如果解決方案不存在,我打算編寫一個小命令行界面(CLI)程序來解析XML。 See the project write-up on github。
我不喜歡'重新發明輪子',除非有必要,所以你的幫助表示讚賞。
我最近有一個類似的要求,目前我唯一能找到的是http://subdi.vision/extract/,但是我沒有測試它,因爲它很昂貴。也許可以幫助別人。 – ravisorg
謝謝@ravisorg - subdi.vision/extract功能幾乎是我一直在尋找的。我認爲我的修訂版本超過了2000個,因此還需要爲高級版本付費。我可能會玩免費版本來測試它。如果是這樣,我會回報。 –