簡體   English   中英

Pharo - 如何在版本控制中共享靜態資源?

[英]Pharo - How do I share static resources in version control?

假設我有Pharo Smalltalk中某些對象使用的圖像,我該如何在VCS存儲庫中對其進行版本化? Pharo如何處理這些靜態資源?

我知道我可以從操作系統層次結構樹加載一個圖像並放入一個類實例變量,例如,圖像持久性將保留它,但我試圖通過Monticello對該類的包進行版本化,刪除並加載回來並且圖像位圖丟失了。

我找到了這個頁面http://smallthoughts.tonyfleig.com/Blog/article/id/1144940 ,但由於我沒有找到當前Pharo 5發行版和目錄中描述的類,我不確定是否會是個好方法。

您有三個主要選項

將資產存儲在方法中作為代碼

這是最常用的方法,並且Pharo 5和之前也用於存儲圖標(並且仍然被系統的某些部分使用)。

方法是將數據以某種編碼格式(通常是base64或字節數組)存儲為字符串,然后在第二種方法中,您可以解碼該數據。 使用這種方法,資產只是一個常規代碼,因此您將對其進行版本化。 例如:

MyIcons>>icons
    ^ icons ifNil: [ icons := Dictionary new ]

MyIcons>>myIconContents
    ^ 'BASE64STRING'

MyIcons>>myIcon
    ^ icons
            at: #myIcon
            ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self myIconContents readStream) ].

理想情況下,您還可以將MyIconsMyIcons單例,因此可以正確緩存它。

手動做這可能有點乏味,所以我前段時間寫了一個工具https://github.com/peteruhnak/IconFactory (它仍然非常基本,但它主要完成它的工作)。

在CI中添加資產/根據需要從Web加載它

如果您為具有CI(Jenkins,Travis)的最終用戶生成預構建的映像,則可以將資源作為構建腳本的一部分加載到那里。 我相信,這是Pharo 6目前用於圖標的內容。 然而,缺點是用戶必須始終使用構建的映像,否則它將自動(從類初始化)從Web上的某處下載資產(如果您沒有Internet訪問權限,則可能會出現問題,或者網站落了)。

使用Git

最后,如果您使用git來存儲代碼(GitFileTree或IceBerg),那么安裝項目還需要存儲庫的副本(因此要么自動下載一個,要么將其指向您的本地克隆)。 然后,您可以引用克隆的repo來檢索數據。 這很可能有點挑剔,但原則上應該是可能的。


另請注意,有一些計划正在使用Pharo 6(當前的開發版本)正確管理資產,但我不確定它的狀態,或者是否因此版本而被刪除(這將最有可能推動Pharo 7的開發) )。

Pharo(名為Monticello)目前使用的版本控制系統無法處理這些類型的文物。 蒙蒂塞洛了解類,方法,特征和其他一些東西,但它既不存儲可變數據(例如,類變量中的位圖),也不存儲其他資源。

話雖這么說,您可以使用Git存儲庫作為后端(請參閱MontTello存儲庫的FileTree ,您可以根據需要隨意添加資源到Git存儲庫(只要您不修改FileTree結構)。您可以然后在必要時簡單地加載它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM