2008-10-12 96 views
9

我已經搜索了一下,但還沒有找到滿意的答案,所以我想聽聽你對此的看法。提交二進制文件到SVN

我有幾個工具,我必須不時更新並部署到幾臺服務器。源代碼在SVN存儲庫中進行管理。

爲了節省自己通過ftp或類似方式將二進制文件複製到生產服務器的麻煩(我無法在服務器上構建項目),我正在考慮在存儲庫中創建一個區域來提交它們以及。然後我可以隨時從svn服務器中檢索最新版本的可執行文件,只要我需要它們即可。

因爲我不一定要每次處理源代碼時更新/提交二進制文件,所以我不會將二進制文件夾創建爲我的項目的子文件夾。承諾二進制文件將(而且應該)是一個單獨的,有意識的行爲。

--- trunk 
    --- project1 
    --- project2 
--- built 
    --- project1 
    --- project2 

據我所知,這個設置應該沒有問題。我真正喜歡的是將源修訂版和二進制文件都放在一個標記中,以便能夠一次檢索出屬於同一物的所有內容。

--- tags/project1/release2/ 
     includes files from 
--- trunk/project1/ revision 487 and 
--- built/project1/ revision 488 

是我在追求什麼,我將如何實現它? 我是否應該考慮解決此問題的其他方法?

+0

[SVN和二進制文件]的可能的重複(http://stackoverflow.com/questions/191533/svn-and-binaries) – 2015-03-10 00:40:26

回答

9

關於你的設置沒有什麼奇怪的(當我需要保留精確的位時,我正在用構建工具和構建工件來做類似的事情。)您想要的佈局絕對可行 - 要在標籤/ project1/release2中「包含」其他分支或標籤的特定版本,您只需在標籤/ project1/release2上設置svn:externals properties,並引用源和修訂版的URL你想拉進去,然後你就定了。

0

不知道爲什麼你不想把二進制文件放在trunk/project1/binaries樹下?話雖如此,也不應該有樹看起來像這樣阻止你:

  • 幹線
    • PROJECT1
    • 項目2
  • 內置
    • PROJECT1
    • 項目2
  • 標籤
    • PROJECT1
    • <tag id>
      • <code as usual>
      • 二進制
2

我相信這是通過使用「外部」來處理的。然而,有些陷阱,我還沒有找到我感覺舒服的東西。我按照你的建議,用我的源代碼庫,但我仍然手動執行。

4

雖然我不能直接回答你的問題,但我會告訴你一個替代方法。

我們有一個單獨的文件服務器用於二進制版本,備份策略類似於SVN服務器的備份策略,每個項目都有一個目錄,其中包含一個不屬於SVN的項目的任何項目,包括一個版本目錄。二進制版本的全部歷史記錄都存儲在這個目錄中,因此您可以從任何地方(從網絡內部)獲取二進制文件,而不需要SVN,即將其複製到某個生產服務器,然後將其發送給客戶或下載在VM中測試。不需要結賬或重建。

我發現這個設置比將二進制文件壓縮到SVN更容易管理。如果你需要一個特定版本的確切二進制文件,它只是在那裏,只要版本已經發布給客戶端(但是,爲什麼你需要一個從未見過太陽光的二進制文件?)。

0

雖然技術上這種方法將工作得很好,但我個人不會使用SVN來存儲這樣的二進制文件。

我有兩個理由爲什麼這種情況。 最初我以爲SVN跟在CVS之後,並沒有存儲二進制差異,事實證明我錯了。無論如何:

0)「技術上」你不需要存儲生成的文件,因爲它們可以重新構建,如果需要的話。顯然這在現實生活中並不實際,但是恕我直言,你仍然應該考慮'如何爲生成的東西建立一個緩存。'
SVN並不真正適合這種使用模式。這本身並不是一個真正意義上的問題,但是我想傳達的是「在SVN中放入東西意味着你在意它並且想要將它歸檔」 - 如果你不這樣做,你不應該傳達這個消息,隱式或其他

1)這很煩人。如果有人檢查你的回購頂部,他們也會得到所有的二進制文件。如果你有超過一兩個兆字節的話,這會讓人們不得不等待這些東西(並且耗盡他們的磁盤空間)。這可以通過建立一個單獨的存儲庫來解決,但是一旦你做了這個恕我直言,你可能只是建立一個單獨的網絡服務器。

2)SVN旨在永久保留所有文件。 It is very painful and time consuming to completely remove things from the repository,這使得存儲你不需要存儲的東西成爲可疑。

我建議您改爲使用Web服務器來存儲二進制文件。 (畢竟,SVN是一個Web服務器**)。在服務器上保留儘可能多的舊二進制文件並進行備份,但如果不再需要它們,則可以刪除舊的無用二進制文件。

**是的我知道它使用DAV,因此它不僅僅是一個普通的舊Web服務器,但從部署到生產機器的角度來看,這個過程是'我使用http從http://blah'下載了一些文件,所以它可能是一個。

+1

@Orion Edwards:請確保您在下次發佈之前仔細檢查您的事實;來自:http://subversion.tigris.org/faq.html#binary-files「Subversion使用了一種在二進制文本和文本文件上同樣適用的差異化方法」 – Miquella 2008-10-12 20:43:04