使用SVN管理unityproject

本文分享了Unity项目与SVN版本控制系统集成的经验,包括如何配置Unity以支持SVN、解决预设脚本丢失和文件移动的问题,以及如何有效地合并场景变更。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



 

我们的项目使用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下新建的unityproject一般文件夹例如以下:

image_20141120150836.png

 

这里我们须要关心的仅仅有两个目录:AssetsProjectSetting。前者不用多说。后者保存一些setting文件tag layerphysics等等也是必要的。而Library不过导入资源的一个缓存,网上有说法要保留各种manager文件之类,事实上不是必需的。

是剩下的都是mono或者VS产生的不用关心的。

所以正式项目一般都是本地做好须要SVN保存的两个目录,然后上传到SVNserver,这样能够在保证不影响工作的情况下把unityproject的最小量保存。

 

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

       前面常常会出现这种情况:我做好了一个prefab。包含gameobject和挂在上面的脚本,上传prefabcs文件到SVN,但是别人pull下来project后发现你这个prefab的脚本是missing的。这个是无比让人头疼的,又一次拖一遍的工作量是巨大的,并且又一次设置脚本參数也是一件非常头疼的事情。这个问题原因就在于这就是前面提到的meta文件。Meta文件中有个重要的东西就是guidguid是文件唯一标示,文件中的关联关系都是基于guid而不是基于文件名称和文件路径的。当一个新文件创建之后,unity会自己主动给它生成一个guid

假设没有上传meta,所以两个project的guid不同,则关联关系自然找不到。

所以我们也必须把相应的meta文件上传。当然,假设愿意解析meta文件,然后直接改动guid就是更好的做法了。当然相对的也easy出错。

相同的。当移动或重命名资源时。确保你也对应的移动或重命名了meta文件。当脚本文件内容发生变化的时候,实际上guid是不会发生变化的。并且unity事实上并不基于文件内容增量变化的版本号管理。而是覆盖式的。

所以官方文档提到文件的移动的时候也特别小心翼翼,直接在unity中操作是最好的方式。这里特别要说明的是gitSVN的差别,在unity中新建的文件,git会默认在本地库给你找出来,然后让你提交。而SVN则不会。须要你手动的add。假设没有选择显示meta,就悲剧了。

这里就是上文提到Verion ControlMode选择可见meta的重要性了。

 

3关于场景的merge

       前面我们提到了我们让资源序列化为text。相同的对一个场景进行改动。

A添加一个怪物,B添加了一棵树。

A先进行提交,B则必须进行merge。打开场景会告诉你有冲突,场景中什么都没有。

打开场景的文本格式,由于我们之前选择用text来存储资源,这时候的优点就来了。文件的text格式应该是这种:

Mine

image_MINE.png

 

Middle

image_MIDDLE.png

 

 

Theirs

THEIRS.png

 

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

 

也是刚用SVN管理unity项目,所曾经面两个问题还都被我遇到了。所幸涉及的反复工作量不大。上论坛的时候有看到这样一句话“用一个人当作SVN管理员。

全部东西都是通过这个管理员提交。

其余人仅仅能下载(没提交权限)

改动的全部东西全部给管理员整合”。事实上也认为挺不错的,特别是项目大起来后。涉及美术策划和程序交互的时候,这个管理员既整合又优化,能够解决大量的合作问题。对项目非常有优点。

希望对用unity工作的团队有所帮助。

### 将现有 Unity 项目添加并提交到 SVN 仓库的方法 为了将现有的 Unity 项目成功导入到 SVN 服务器上的版本库中,可以通过以下方式实现完整的流程: #### 创建新的空版本库 首先需要在 SVN 服务器端创建一个新的空版本库,并确保该版本库具有适当的读写权限设置。这一操作通常由 SVN 管理员负责完成[^1]。 #### 检出空版本库 利用 TortoiseSVN 客户端从服务器检出刚刚建立好的空版本库至本地机器的一个特定目录下。此步骤将会生成一个包含隐藏 `.svn` 文件夹的新文件夹结构。 ```bash # 示例:从命令行检出空版本库 svn checkout http://your-svn-server/path/to/new-repository C:\local\project-folder ``` #### 添加 Unity 项目文件 把整个 Unity 工程复制粘贴进刚才通过 Checkout 得来的那个带有 `.svn` 隐藏文件夹的目标文件夹里去[^2]。注意不要遗漏任何重要组成部分,尤其是 Assets 和 Library 这两个核心文件夹。 #### 标记新增文件 右键单击目标文件夹内的所有待管理文件,在弹出菜单中选取 `TortoiseSVN -> Add` 来标记它们为即将加入版本控制的状态。这样做的目的是让 SVN 能够识别哪些是新引入的内容[^2]。 #### 提交变更 最后一步就是执行 Commit 行动了。再次右键点击目标文件夹,选择 `SVN Commit…`, 输入必要的日志消息描述此次提交的主要内容及其意义,仔细核对列表里的各项条目无误后按下 OK 键发送给远程服务器永久保存下来^。 --- ### 自定义自动化脚本辅助提交与更新 除了手动方式进行上述各环节外,还可以编写自定义 GUI 工具简化日常重复劳动量较大的任务。例如下面展示了一个简单的 Unity 编辑器窗口插件例子,它允许开发者一键触发 CS 类型源码的提交或拉取最新改动等功能[^3]: ```csharp using UnityEditor; public class SvnTool : EditorWindow { [MenuItem("GameTools/Svn工具")] public static void ShowWindow() { var w = GetWindow<SvnTool>(); w.titleContent.text = "SVN Tool"; w.Show(); } private void OnGUI() { if (GUILayout.Button("提交CS代码")) { ExecuteSvnCommand("/command:commit", "/logmsg:Auto commit by tool"); } if (GUILayout.Button("更新CS代码")) { ExecuteSvnCommand("/command:update"); } } private void ExecuteSvnCommand(string command, string logMsg = "") { string scriptsPath = $"{Application.dataPath}/Scripts"; System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo{ FileName="TortoiseProc.exe", Arguments=$"{command} /path:\"{scriptsPath}\" {(!string.IsNullOrEmpty(logMsg)?$"/logmsg:{logMsg} ":"")}/closeonend:0" }; System.Diagnostics.Process.Start(psi); } } ``` 以上代码片段展示了如何集成基本的 SVN 功能进入 Unity 开发环境中,方便快捷地管理和同步团队成员间的共同成果[^4]. --- ### 注意事项 - 在初次提交之前,请务必清理掉不必要的临时文件(如 obj/bin 文件夹),以免增加不必要的存储负担。 - 若遇到忽略某些类型文件的需求时,可适当调整 global-ignore 属性来过滤掉不需要跟踪的对象集合。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值