2012-01-12 84 views
0

我已經在這個問題上好幾天了,並且一直無法解決它。存儲庫中的文件的選擇性SVN導出

我不知道如果我的方法是可行的,如果任何人有一個更好的解決辦法,我開的想法,所以我要提供的全貌

這是該方案

我們有一個大型存儲庫,目前我們正在從StarTeam轉移到SVN。

在存儲庫中我們有一個特定的目錄,其中包含一組鏈接的文件。這些文件鏈接到分佈在項目樹的其餘部分的原始文件。我們使用這個目錄中的文件來生成翻譯所需的蜇傷。

在SVN中沒有鏈接功能。我需要選擇只導出與翻譯最新版本相關的文件,但只有那些文件不是整個修訂版本問題開始在版本庫中分發。總共有這些文件的約300所以它不是可以手動

我也不過也許使用屬性來設置所有的文件,但沒有辦法通過屬性來導出

感謝

回答

0

的我想如果你想用svn而不是外部腳本(你應該考慮作爲替代),你可能需要爲此創建一個新的存儲庫結構。

svn的一個特性是svn:externals,您可以在其中創建一個新的存儲庫,從其他svn存儲庫獲取子目錄。正如你所說,你有這麼多的文件,我認爲某種外部腳本可能是唯一合理的解決方案。

我可能會這樣做:我會將文件列表放到存儲庫中的文本文件中,並讓腳本獲取該文件列表並將其導出到您需要的結構中所需的結構它。列表格式和要處理的工具取決於您擁有的結構和需要導出的結構。

+0

感謝您的快速回答。我不會要求版本歷史記錄。每次我們發佈新版本時,我都需要能夠提取這些微粒文件。在starTeam中,有一個功能可以鏈接文件,這意味着我在兩個位置擁有相同的文件,但當其中一個文件更新時,我可以通過查看鏈接來識別它已經發生了變化。不幸的是重組倉庫不是一個選項 – Jonxm05 2012-01-12 21:15:01

+0

看起來像svn:外部也可以做文件。 StackOverflow:[是否有可能鏈接SVN存儲庫文件...](http://stackoverflow.com/questions/1401951/is-it-possible-to-link-svn-repository-files-so-that-a- file-is-actually-a-referen)和[svn:externals](http://svnbook.red-bean.com/nightly/en/svn.advanced.externals.html)幫助。 – joneskoo 2012-01-12 21:36:30

+0

您可能可以使用svn屬性(如externals但其他)來標記要導出的文件,並使您的工具根據該信息導出文件。我不知道是否有現成的解決方案。 – joneskoo 2012-01-12 21:44:59

0

這不是一個基於SVN的解決方案,而是一個基於SVN約束的問題的解決方法。

不知道它是否會起作用,但您可能會考慮更改您的repo的佈局,只是顛倒翻譯文件鏈接的方向。您可以將實際文件保存在您的directoy中,比如說您想要導出的文件,並使用以前實際文件所在的鏈接(「分佈在整個項目樹的其餘部分」)。

那裏你不會有SVN導出翻譯文件目錄的問題。

0

不完全確定你的意思是鏈接。 Unix上的Subversion可以存儲與存儲庫中其他文件的符號鏈接,但我通常不會推薦它。這不是Windows友好的。

你如何使用這些鏈接究竟是什麼?你是否只導出這個目錄,並且因爲它與實際內容相關聯,所以你只取出你想要的文件?這些是文件系統鏈接,還是StarTeam的專有功能,如在VisualSourceSafe中的舊共享

我通常建議通過某種構建系統來照顧這樣的事情。您可以使用像Ant這樣的構建語言,它非常強大,可以在任何使用Java的平臺上運行。或者,你可以使用Python或Perl之類的東西。我會遠離shell腳本和批處理腳本,因爲它們不是很普遍。

您從存儲庫執行完整檢查,然後運行構建爲您執行導出。導出將簡單地將所需的文件複製到某種構建目錄中。 (我建議在結帳的根目錄下創建一個名爲target的目錄,並將所有生成的生成文件放在該目錄下,這樣可以非常簡單地清理構建版本,我會將生成的版本置於target/archive之下)。

這不僅使從版本控制系統移動到版本控制系統更容易,而且允許您使用像Jenkins這樣的系統來創建和存儲所需的工件。當你需要一個版本時,你可以直接從Jenkins網頁下載它,而不是檢查它。