使用SVN管理unity工程



我们的项目使用SVN管理,这几天遇到了几个问题,解决了一下,顺便做了一个总结。

1.关于使用SVN管理unity项目的一些设置和说明

首先在unity中进行两部操作:Edit->ProjectSettings->Editor菜单,选择Verion
Control Mode 为VisivaleMeta File,选择Asset
SeriaLization Mode 为ForceText。第一步选择外部版本控制可见Meta文件,这样子会为Asset文件夹下面每个资源创建一个.Meta文本文件,来记录unity所需要的重要信息。重要在哪里,后面会看到。第二步是因为unity大部分文件都是二进制存储的,会频繁导致莫名其妙的冲突,会带来巨大的数据量,不能合并,还有一个好处,在blame的时候比较清晰直观。而可以merge场景带来的方便的无可计量的。文章的第二第三点围绕这个两个设置做了详细说明。

下面先谈谈SVN目录的创建。Window下新建的unity工程一般目录如下:

这里我们需要关心的只有两个文件夹:Assets和ProjectSetting。前者不用多说,后者保存一些setting文件tag
layerphysics等等也是必要的。而Library仅仅是导入资源的一个缓存,网上有说法要保留各种manager文件之类,其实没必要的。是剩下的都是mono或者VS产生的不用关心的。

所以正式项目一般都是本地做好需要SVN保存的两个文件夹,然后上传到SVN服务器,这样可以在保证不影响工作的情况下把unity工程的最小量保存。

2.两个问题:预设脚本丢失和文件移动

前面经常会出现这样的情况:我做好了一个prefab,包括gameobject和挂在上面的脚本,上传prefab和cs文件到SVN,可是别人pull下来工程后发现你这个prefab的脚本是missing的,这个是无比让人头疼的,重新拖一遍的工作量是巨大的,而且重新设置脚本参数也是一件很头疼的事情。这个问题原因就在于这就是前面提到的meta文件。Meta文件中有个重要的东西就是guid,guid是文件唯一标示,文件里的关联关系都是基于guid而不是基于文件名和文件路径的。当一个新文件创建之后,unity会自动给它生成一个guid。如果没有上传meta,所以两个工程的guid不同,则关联关系自然找不到。所以我们也必须把对应的meta文件上传。当然,如果愿意解析meta文件,然后直接修改guid就是更好的做法了,当然相对的也容易出错。

同样的,当移动或重命名资源时,确保你也相应的移动或重命名了meta文件。当脚本文件内容发生变化的时候,实际上guid是不会发生变化的。而且unity其实并不基于文件内容增量变化的版本管理,而是覆盖式的。所以官方文档提到文件的移动的时候也特别小心翼翼,直接在unity中操作是最好的方式。这里特别要说明的是git和SVN的区别,在unity中新建的文件,git会默认在本地库给你找出来,然后让你提交。而SVN则不会,需要你手动的add,如果没有选择显示meta,就悲剧了。这里就是上文提到Verion
ControlMode选择可见meta的重要性了。

3关于场景的merge

前面我们提到了我们让资源序列化为text。同样的对一个场景进行修改。A增加一个怪物,B增加了一棵树。A先进行提交,B则必须进行merge。打开场景会告诉你有冲突,场景中什么都没有。打开场景的文本格式,因为我们之前选择用text来存储资源,这时候的好处就来了,文件的text格式应该是这样的:

Mine:

Middle:

Theirs:

Ok,这个显而易见了。具体的XXXX内容有兴趣的话可以详细的看看,但是我想,大多数的基于场景的merge应该只合并不修改吧。所以说,对场景的修改之前还是团队内部要协商好,场景的merge费事而且不讨好。

也是刚用SVN管理unity项目,所以前面两个问题还都被我遇到了,所幸涉及的重复工作量不大。上论坛的时候有看到这样一句话“用一个人当作SVN管理员。所有东西都是通过这个管理员提交。其余人只能下载(没提交权限)。修改的所有东西全部给管理员整合”。其实也觉得挺不错的,特别是项目大起来后,涉及美术策划和程序交互的时候,这个管理员既整合又优化,可以解决大量的合作问题,对项目很有好处。希望对用unity工作的团队有所帮助。

时间: 2024-07-29 13:25:56

使用SVN管理unity工程的相关文章

Unity3D-RPG项目实战(2):使用SVN管理Unity项目

Unity提供了自己的XXXServer,不过大家评论好像不是很好用,主要是不支持branch等我们做项目的重要特性:他还推荐Perforce这样高大上的版本管理系统,不过都很贵.所以我还是打算使用比较习惯的SVN来管理. 需要版本管理的目录 新建一个Unity Project之后,发现产生了很多目录和文件,其中只有两个是需要版本管理的:Assets.ProjectSettings.其他的都是自动生成的: *.csproj,*.sln这些IDE的工程文件是自动生成的: Library,主要存的是

代码是如何管理Unity工程目录中的资源组织

一.资源数据库(AssetDatabase) API:  http://docs.unity3d.com/Manual/AssetDatabase.html 二.资源工具集(***Utility) 三.资源导入(AssetImport)  

如何用 svn 管理 unity3d 项目

因为svn用惯了, asset server还是收费的,所以这个版本还是使用svn来管理unity3d的工程 需要版本管理的目录 新建一个Unity Project之后,发现产生了很多目录和文件,其中只有两个是需要版本管理的:Assets.ProjectSettings.其他的都是自动生成的: *.csproj,*.sln这些IDE的工程文件是自动生成的: Library,主要存的是一个本地的Cache文件,不要加到版本管理中: Tem,这个是Build过程中产生的文件: 提交的时候仅提交Ass

SVN管理工具Cornerstone之:创建分支、提交合并

创建工程的分支: 步骤: 1.选择左下角仓库repositories中的工程名->选择trunk->点击Branch->在提示框里填写分支名称create, 2.在做上角working copies中选择对应的工程名,点击update进行更新下载 3.以上步骤就完成了分支的创建 分支的提交 1.分支完成后,可以选择提交整个分支,也可以选择提交分支中changes的文件 2.选则完成后,点击工具栏中的commit,填写更改的log 分支的合并 3.选择trunk,点击工具栏中的Merge

【译】Unity工程目录中的特殊文件夹

转自: http://wiki.unity3d.com/index.php/Special_Folder_Names_in_your_Assets_Folder Unity中一些特定名字的文件夹有特殊的属性. Hidden Folders Unity会忽略以.起始命名的文件夹(例如 ".UnitTests/",".svn/"),放在这种文件夹中的资源不会被导入到Unity中,脚本也不会被编译,同时在工程视图中无法看到此类型的文件夹. (windows视窗下无法命名为

Unity工程资源破解

    Unity工程资源提取其实还是很方便的,网上也有很多相关介绍,比如雨凇就专门写了一遍关于破解Unity资源的文章(http://www.xuanyusong.com/archives/3618),当然即使有傻瓜式教程,也难免会踩一些坑,下面记录一下这两天破解Unity资源的工程.     一.disunity     disunity是一款开源项目,java语言写的,轻量级,传言简单易用,然而并不好用,     1.disunity5.x版本命令如何尝试都不成功,总是报出如下问题:   

专业的浏览和编辑管理CAD工程文档控件ABViewer

ABViewer是一种高品质,低成本,高效率的多功能设计及工程文档管理应用程序. ABViewer为您提供专业的浏览和编辑工具. 支持多种格式,如:DWG, DXF, DWF, Hewlett-Packard HPGL, PLT, HGL, CGM, SVG, TIFF, BMP, JPG, GIF etc 等. 具体功能: ABViewer它可以方便我们在下述几种情况下大大节省时间: 当您需要在您的MS Word 文档中导入CAD控件图像时 您可以获得比常规软件快两倍的CAD文件(DXF和DW

SVN管理系统安装及其操作

SVN管理系统安装及操作 防伪码:学习永远不晚! 前言: SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS.CVS,它采用了分支管理系统,它的设计目标就是取代CVS.互联网上很多版本控制服务已从CVS迁移到Subversion.说得简单一点SVN就是用于多个人共同开发同一个项目,共用资源的目的. 理论: SVN运行方式: svn服务器有2种运行方式: 独立服务器和借助 apache运行.两种方式各有利弊,用户可以自行选择. SVN存储版本数据有两种: svn存储版

Tomcat通过配置一个虚拟路径管理web工程

关于虚拟路径.学问javaweb训练课程,如今,鉴于这种情况下老师. 当我们的项目,当在不同的文件夹项目.我们如何使用tomcat去管理web工程. 教师提出的解决方案是 使用虚拟路径方式,并按照实施例,以下面的方式tomcat进行配置.使得 tomcat能够管理不同文件夹上的项目. 我的问题:项目不是转换成war包公布到tomcat上吗,然后放在了webapps文件夹以下吗? 或者直接把项目放置webapps以下. 1.为什么有可能出现 管理不同文件夹下的web项目呢? 2.上面两种方式,处理