个人学习笔记,如有错误、疑问、建议,欢迎留言。
声明:本文不得以任何形式进行转载。


前言:在商业的项目中,许多公司会使用SVNGIT等版本控制系统来协作开发,可是在Unity编辑器中并没有集成SVN的相关功能,每当我们需要提交或者更新代码时,需要在项目的文件夹中去进行操作,所以写了一个工具来实现在Unity编辑器中可以直接使用SVN


核心原理:
 在Windows中,我们可以通过cmd启动各种其他应用程序,SVN也不例外,我们在cmd中执行这行命令,便可以进行SVN操作:

TortoiseProc.exe /command:xxxxxxx  /path:xxxxxxxxx /closeonend:0

 其中,/command:后为操作的类型(即updatecommitrevert);/path:后为项目的路径。

根据以上原理,我们的工具代码如下:

using System;
using System.Threading;
using System.Diagnostics;
using UnityEngine;
using UnityEditor;/// <summary>
/// Unity SVN工具
/// </summary>
public class SVNTool
{/// <summary>/// svn的GUI程序名/// </summary>private static readonly string SVN_APP_NAME = "TortoiseProc.exe";/// <summary>/// 项目路径,即Assets文件夹/// </summary>private static string projectPath = Application.dataPath;/// <summary>/// cmd命令模板/// </summary>private static string cmdCommandModule = SVN_APP_NAME + " " + "/command:{0} /path:{1} /closeonend:0";/// <summary>/// svn update assets/// </summary>/// update整个Assets文件夹[MenuItem("Tools/SVN Tool/SVN Update All")]public static void UpdateAll(){string cmdCommand = string.Format(cmdCommandModule, "update", projectPath);InvokeCmd(cmdCommand);}/// <summary>/// svn commit assets/// </summary>/// commit整个Assets文件夹[MenuItem("Tools/SVN Tool/SVN Commit All")]public static void CommitAll(){string cmdCommand = string.Format(cmdCommandModule, "commit", projectPath);InvokeCmd(cmdCommand);}/// <summary>/// svn revert assets/// </summary>/// revert整个Assets文件夹[MenuItem("Tools/SVN Tool/SVN Revert All")]public static void RevertAll(){string cmdCommand = string.Format(cmdCommandModule, "revert", projectPath);InvokeCmd(cmdCommand);}/// <summary>/// svn showlog assets/// </summary>/// showLog整个Assets文件夹[MenuItem("Tools/SVN Tool/SVN ShowLog All")]public static void ShowLogAll(){string cmdCommand = string.Format(cmdCommandModule, "log", projectPath);InvokeCmd(cmdCommand);}/// <summary>/// svn update select/// </summary>/// update在Assets界面选中的资源[MenuItem("Assets/SVN Tool/SVN Update")]public static void UpdateSelect(){string cmdCommand = string.Format(cmdCommandModule, "update", GetSVNCommand());InvokeCmd(cmdCommand);}/// <summary>/// svn commit select/// </summary>/// commit在Assets界面选中的资源[MenuItem("Assets/SVN Tool/SVN Commit")]public static void CommitSelect(){string cmdCommand = string.Format(cmdCommandModule, "commit", GetSVNCommand());InvokeCmd(cmdCommand);}/// <summary>/// svn revert select/// </summary>/// revert在Assets界面选中的资源[MenuItem("Assets/SVN Tool/SVN Revert")]public static void RevertSelect(){string cmdCommand = string.Format(cmdCommandModule, "revert", GetSVNCommand());InvokeCmd(cmdCommand);}public static string GetSVNCommand(){string[] selectFilePath = GetSelectFilePath();string temp = string.Empty;for(int i = 0; i < selectFilePath.Length; i++){temp += selectFilePath[i];temp += "*";}return temp;}/// <summary>/// 获取选中的资源的路径/// </summary>/// <returns>选中资源的路径 string[]</returns>public static string[] GetSelectFilePath(){string[] guidArray = Selection.assetGUIDs;string[] selectFilePath = new string[guidArray.Length];for(int i = 0; i < guidArray.Length; i++){selectFilePath[i] = AssetDatabase.GUIDToAssetPath(guidArray[i]);}return selectFilePath;}/// <summary>/// 调用cmd/// </summary>/// <param name="cmdCommand">cmd命令</param>private static void InvokeCmd(string cmdCommand){new Thread(new ThreadStart(() => //新建线程,ThreadStart表示在Thread上执行的方法{try{Process p = new Process(); //新建系统进程//Process中的StartInfo为要传递给Process.Start()方法的属性//设置p.StartInfo属性p.StartInfo.FileName = "cmd.exe"; //要启动的应用程序p.StartInfo.Arguments = "/c " + cmdCommand + "&exit"; //启动应用程序时要使用的一组命令行参数p.StartInfo.UseShellExecute = false; //是否使用操作系统shell启动进程(如果是从可执行文件创建进程,应设置为false)p.StartInfo.RedirectStandardInput = true; //指示应用程序的输入是否从StandardInput流中读取的值(StandardInput)p.StartInfo.RedirectStandardOutput = true;p.StartInfo.RedirectStandardError = true;p.StartInfo.CreateNoWindow = true; //不显示程序窗口p.Start(); //启动进程p.WaitForExit(); //等待程序执行完退出进程p.Close(); //关闭进程}catch(Exception e){Console.WriteLine(e.Message);}})).Start();}
}

 该工具实现了SVNupdatecommitrevertshowlog这四个最常用的功能。


补充:
 1、除了以上工具中的SVN命令外,SVN还有其他几种cmd命令:checkoutdiffadd
 2、在Visual Studio中,可直接在拓展中安装VisualSVN for Visual Studio插件实现SVN操作。

Unity工具——SVN工具相关推荐

  1. SVN工具的使用 和在Eclipse中安装GPD插件:(多步审批流,因此选择使用工作流(JBPM)来实现)...

    前言 重点解说SVN工具的还原版本号. 1.提交svn之前.要先更新文件.假设更新之后有版本号冲突的话.就线下解决掉冲突,在把该文件标记为已经解决冲突. 正文 使用SVN还原历史版本号 去除掉Ecli ...

  2. 黑苹果 装SVN工具 cornerstone无法打开解决办法——网卡内建

    黑苹果 装SVN工具 cornerstone无法打开解决办法--网卡内建 具体内容,请参照远景帖子:http://bbs.pcbeta.com/viewthread-900017-1-1.html 转 ...

  3. Unity推出2D工具:不再只是3D引擎

    本文来自 GameLook ,转载自觉标明原文出处,以示尊重! 原文:http://www.gamelook.com.cn/2013/08/128864 GameLook报道/2013 Unity全球 ...

  4. 项目管理实践之版本控制工具SVN在Windows平台下的平台搭建

    通过<项目管理实践之版本控制工具SVN>我们知道,在windows平台下,如果直接使用Subversion,那么在Windows 系统上,要想让它随系统启动,就要封装SVN Server为 ...

  5. Unity TileMap 2D 工具基础教程

    Unity TileMap 2D 工具基础教程 Unity TileMap 2D 工具基础教程 TileMap 工程创建 Sprite Editor 工具使用 TileMap 功能说明 TilePal ...

  6. Unity编辑器小工具——文件查重(MD5)

    Unity编辑器小工具--文件查重(MD5) 算法思想: 在Unity中,每一个不同资源.文件所生成MD5码是不同的,但是相同文件,路径不同.文件名不同的同一类文件的MD5码是相同的,所以可以通过生成 ...

  7. java操作svn工具类

    依赖包 <dependency><groupId>org.tmatesoft.svnkit</groupId><artifactId>svnkit< ...

  8. ios Mac下的SVN工具:Cornerstone与Versions和使用subversion管理iOS源代码

    原文地址为: ios Mac下的SVN工具:Cornerstone与Versions和使用subversion管理iOS源代码 ios管理代码的方式除了上次介绍的利用ios 自带的git库,还有使用S ...

  9. Unity游戏开发工具的下载与安装

    Unity游戏开发工具 Visual Studio下载 UnityHub的下载 Visual Studio下载 打开网址https://visualstudio.microsoft.com/zh-ha ...

  10. Unity实用小工具或脚本—以对象方式访问MySql数据库

    一.前言         以对象方式处理MySql数据库顾名思义就是可以将每个数据库表作为一个类,没一条数据作为一个对象来进行操作,大致思路和我上一篇文章类似,这里不再赘述.文章后有资源下载地址,所使 ...

最新文章

  1. Using PyQt first procedure-bupt IPTV client
  2. 转行python能拿到多少钱_想转行学python过来人提醒大家几点
  3. 工作301:substring使用
  4. 三步走!从头开始设计一款游戏
  5. C# 根据年月日计算星期几
  6. 旋转矩阵与欧拉角的相互转换及代码
  7. ijkplayer知识点(1)- ijkplayer 调用流程总览思维导图
  8. python cpk计算器_Python进行CPK计算
  9. Flash XSS 漏洞实例
  10. Hadoop纠删码(Erasure Coding)简介
  11. 和周杰讨论:DB2连接问题
  12. python 生成词云
  13. r5 5500参数 r5 5500有核显吗 锐龙r5 5500相当于i几
  14. 【论文阅读】Modeling the world from internet photo collections
  15. 字典、元组、字符串习题
  16. 数学基础知识总结 —— 11. 什么是泰勒公式与泰勒级数
  17. 计算机科学的鼻祖,他是现代计算机科学的鼻祖,编程界的上帝
  18. 人生成功的六匹马(转自喷嚏网的一篇品书)
  19. 新手问题 Table '库名.表名' doesn't exist
  20. 15个最佳Flash物理游戏

热门文章

  1. 四位共阳极数码管显示函数_实验四 共阴数码管静态显示
  2. VMware12虚拟机中安装win7(安装好的解压版Win7_64-cl1.vmdk)
  3. 图解机器学习算法(14) | PCA降维算法详解(机器学习通关指南·完结)
  4. SAXReader解析xml
  5. matlab指派问题求法,matlab求解指派问题
  6. 遥控直升机主旋翼设定
  7. 曾经的百度开源呼叫中心
  8. c语言九宫格拼图程序,C语言简单游戏编程学习入门之九宫格拼图
  9. python数据处理分析实训心得总结_python数据分析的总结
  10. 今日分享|每日领红包最高618,全是无门槛使用!