Unity3D 如何做好版本控制?不限於腳本,包括圖片,模型等二進位文件。

我最近和別人一起想做一個 Unity3D 的項目。在這之前一直是用 Git 做版本控制的。但在 Unity 下發現很麻煩。特別是各種 meta 文件,perfab 文件等等。根本不好用了啊。二進位文件就更不用說了。

經常出現的情況是,我拉取了遠端倉庫到本地,檢查了工作目錄是 clean 的。然後打開 Unity ,然後 Unity 會載入一次所有文件,之後就會發現各種文件都被 Unity 自己修改了。


目前項目這樣版本控制

1 在unity里,應該只對Assets(包含,meta)和ProjectSettings這兩個文件夾做版本控制,其他的文件都是unity或工具生成出來的。

2 設置project setting -&>editor setting-&> Asset serialization為Force Text

3 對於多人編輯同一個scene, 通過鎖住頂層gameObject.hideFlags |= HideFlags.NotEditable的方式,分配不同的人編輯不同的層次GameObject。這樣一個scene的merge不會出錯。例如

4 通過本地的config文件或svn的賬戶信息,在打開場景時,自動對不同人加不同鎖。5 不相關的場景編輯,可以每個人一個project,然後通過export package和import package的方式進行合併

參考:

http://chrisbrough.com/post/2013/05/13-Collaborative-Editing-in-Unity3D/


如果有文件被Unity修改,除了少數中間件會有這種行為之外,我覺得更大的可能是你把Library目錄也管理進去了。

涉及到二進位文件的話,git沒有獨佔鎖,所以你需要溝通好保證沒有人同時在一個二進位素材上工作

樓上說的Force Text Serialization也是一個部分,不過就算是文本Unity的Prefab和Scene很多時候也不好Merge……


1.只需要同步,這兩個文件夾

2.editor settings中asset Serialization資源序列化方式強制使用文本,這樣就可以進行版本差異比較了,安全感大增了木有~


用的是Unity Version Control 配合小烏龜來做版本控制 Kjems / UVersionControl

在Unity裡面使用很方便,直接可以在unity裡面對文件加鎖,另外一個人需要修改文件的時候就會看到有人在使用這個文件

下面是文件被人打開後的狀態


推薦Perforce,20人以下免費,unity自帶client。如果和unityvs一起用,可以裝個p4connect插件,可以自動checkout代碼。

unity自帶的assets server反正是有各種奇怪的問題,plasticscm自從某一版之後就必須要付費版本才能使用unity插件了。

補充一下遇到的坑。perforce伺服器默認不開啟utf8模式,記得先開了再往裡加項目。這類版本管理軟體的優勢應該就是加了資源類型的支持,對於binary類型的資源是不會merge的,避免unity各種scene和prefab的混亂。


試一下這個插件,可以比對scene和prefab的衝突,支持svn和git

http://dp0304.com/unity3d/2013/12/05/unity3d-scene-merge/


二進位文件確實麻煩,我們是用svn同步udk工程。unity沒試過,應該有插件的吧


我感覺都有程序員一樣的svn習慣就沒什麼問題。但是介於很多人沒這個習慣就很麻煩。但這不是unity的事情。


推薦閱讀:

paxos日誌回放應該怎樣去做?
喜歡編程語言理論,國內有什麼好去處?
C++ 編程過程中,有哪些常犯的壞習慣,哪怕對於多年經驗的程序員也會出現?
大學每天用6個小時編程,以後會怎樣?
stl的sort和手寫快排的運行效率哪個比較高?

TAG:編程 | Unity遊戲引擎 | 版本控制 |