个人学习笔记,如有错误、疑问、建议,欢迎留言。 声明:本文不得以任何形式进行转载。
?前言:在商业的项目中,许多公司会使用SVN 或GIT 等版本控制系统来协作开发,可是在Unity 编辑器中并没有集成SVN 的相关功能,每当我们需要提交或者更新代码时,需要在项目的文件夹中去进行操作,所以写了一个工具来实现在Unity 编辑器中可以直接使用SVN 。
核心原理: ?在Windows 中,我们可以通过cmd 启动各种其他应用程序,SVN 也不例外,我们在cmd 中执行这行命令,便可以进行SVN 操作:
TortoiseProc.exe /command:xxxxxxx /path:xxxxxxxxx /closeonend:0
?其中,/command: 后为操作的类型(即update 、commit 、revert );/path: 后为项目的路径。
根据以上原理,我们的工具代码如下:
using System;
using System.Threading;
using System.Diagnostics;
using UnityEngine;
using UnityEditor;
public class SVNTool
{
private static readonly string SVN_APP_NAME = "TortoiseProc.exe";
private static string projectPath = Application.dataPath;
public static string cmdCommand = SVN_APP_NAME + " " + "/command:{0} /path:{1} /closeonend:0";
[MenuItem("Tools/SVN Tool/SVN Update")]
public static void Update()
{
string temp = string.Format(cmdCommand, "update", projectPath);
InvokeCmd(temp);
}
[MenuItem("Tools/SVN Tool/SVN Commit")]
public static void Commit()
{
string temp = string.Format(cmdCommand, "commit", projectPath);
InvokeCmd(temp);
}
[MenuItem("Tools/SVN Tool/SVN Revert")]
public static void Revert()
{
string temp = string.Format(cmdCommand, "revert", projectPath);
InvokeCmd(temp);
}
[MenuItem("Tools/SVN Tool/SVN ShowLog")]
public static void ShowLog()
{
string temp = string.Format(cmdCommand, "log", projectPath);
InvokeCmd(temp);
}
private static void InvokeCmd(string cmdCommand)
{
new Thread(new ThreadStart(() =>
{
try
{
Process p = new Process();
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.Arguments = "/c " + cmdCommand + "&exit";
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = true;
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();
}
}
?该工具实现了SVN 的update 、commit 、revert 、showlog 这四个最常用的功能。
补充: ?1、除了以上工具中的SVN 命令外,SVN 还有其他几种cmd 命令:checkout 、diff 、add ?2、在Visual Studio 中,可直接在拓展中安装VisualSVN for Visual Studio 插件实现SVN 操作。
|