遊戲開發的 Git 應用
Git 用於遊戲開發 | Massively Fun Git for Game Development Git 用於遊戲開發 2012 年 3 月 14 日 多年來,我在電影與遊戲製作中試用過多種版本控制系統:CVS、Perforce,甚至幾套內部自製工具。它們總讓我覺得是「笨拙卻不可或缺的必要之惡」:對於追蹤大型專案的進度極為珍貴,卻也持續帶來混亂、瓶頸與製作流程上的僵化。大約六個月前,Git 首次進入我的視野。它看起來強大又靈活得令人驚嘆。在我加入團隊時,Massively Fun 的開發人員已經將 Git 用於程式開發。我很想看看能否把它成功應用於美術製作。這篇文章將講述後續發生的故事。背景:什麼是 Git?Git 是一套分散式版本控制系統。遊戲開發領域的大多數人至少已熟悉另一套版本控制系統,例如 Subversion 或 Perforce。與這些系統類似,Git 讓我們能追蹤專案中所有檔案的多個不同版本。但 Subversion 和 Perforce 屬於集中式系統——所有檔案都需簽入或簽出位於中央伺服器的儲存庫。Git 則截然不同。它不依賴中央伺服器。每位使用者都會獲得整個儲存庫的完整副本,包含其全部歷史與修訂記錄。這樣的設計帶來許多重要影響,其中多半是正面的。但在我眼中,讓 Git 脫穎而出的關鍵在於:它使分支(branch)與合併(merge)操作幾乎變得輕而易舉。你可以建立一個分支來實驗某個構想,再建另一個分支修復無關的問題,還可以為新功能另開一支。你能在不同分支間快速切換,並視需要將它們合併回去。這是一項極其實用的功能。絆腳石儘管 Git 優勢眾多,但現成的 Git 在美術製作上仍有兩個明顯缺點:它對美術人員不夠友善。Git 的預設介面是命令列。有許多指令與選項需要學習,而其底層概念與其他版本控制系統差異甚大,容易造成混淆。雖然文件豐富,卻往往難以理解。整體而言,這套工具顯得不易上手,甚至有些令人卻步。它並非為管理美術人員所產生的大型二進位檔案而設計。由於每個本機儲存庫都包含完整歷史與所有修訂,大量頻繁變動的美術作品會迅速佔用大量磁碟空間。針對這兩個問題,我們提出了相應的解決方案。介面至關重要市面上已有數款優秀的 Git 圖形介面。美術人員仍需理解 Git 的基本概念,但設計良好的前端能讓學習與使用變得容易許多。我們在以 Mac 為主的環境中發現 Atlassian 的 SourceTree 表現出色:功能強大、直覺易懂,而且目前免費——這對一家精實創業公司而言至關重要。SourceTree 團隊對我們在 Twitter 上提出的支援問題回應迅速(少於 12 小時)。一套出色的 Git 擴充套件 Git-media 解決了 Git 在處理大型二進位檔案方面的不足。這是一個 Git 擴充套件,允許你將檔案存放在 Git 之外。Git 仍會追蹤檔案版本,只是將檔案內容儲存在儲存庫以外的位置。我們原本計畫將大型二進位檔案存放於 Amazon 的 S3 雲端服務。別急然而,搭配使用 SourceTree 與 Git-media 確實有個陷阱:要在我們的儲存庫與 Amazon S3 之間傳輸檔案,必須執行一則 shell 指令;也就是:$ git media sync 若工作流程要求美術人員離開相對舒適的圖形應用程式去輸入 shell 指令,那就稱不上對美術人員友善。SourceTree 確實提供將此指令設定為自訂動作的方式,但這還不夠好。美術人員仍須記得在適當時機執行它。遲早有人會忘記,然後其他人就得浪費寶貴時間排查問題並修復。我們該如何讓 SourceTree 與 git-media 和諧共存呢?Git Wrap 我們撰寫了一個通用的包裝腳本,可在執行 git 指令本身之前及/或之後選擇性地執行其他指令。我們將它設定為在執行與遠端儲存庫互動的指令前後,自動呼叫 git media sync(視情況而定)。接著,我們設定 SourceTree 改用這個包裝腳本,而非內建的 git。包裝腳本的原始碼可在此處的 Github 上取得。冒險仍在繼續我本想告訴你故事到此圓滿落幕:SourceTree 與 git-media 無縫協作,大家從此過著幸福快樂的日子。事實上,它們確實在某種程度上運作良好。可惜,這仍不夠理想。SourceTree 通常能很好地預覽影像檔案。這對美術人員在提交或合併此类檔案變更時至關重要。但使用 git-media 後,SourceTree 便無法預覽這些檔案,因為我們不再將影像實際存入 Git,僅儲存其版本資訊。我們找不到可接受的解決辦法;這成了致命傷。截至撰文之時,我們正再次嘗試利用 Git 的子模組(submodule)功能。將美術資源存放於子模組中,是縮減主專案儲存庫大小的另一種方式。SourceTree 對子模組的理解與支援相當不錯,同時仍保有預覽影像的能力。子模組確實有些特殊行為,但看來不會對美術人員的工作流程造成太大干擾。請持續關注此地;我們會向大家回報後續發展。blog comments powered by Disqus
儲備你的開發書辦公桌
遊戲程式設計書籍、機械式鍵盤、顯示器和開發台硬件