[转]Unity Editor 编辑器扩展 将TortoiseSVN的基础操作内嵌Unity

集成svn同步工具,非常好用


这里写图片描述
/* 
 * 将TortoiseSVN的基础操作内嵌Unity 
 * 这里只是举了几个简单的例子 
 * 具体命令可参见TortoiseSVN的help功能 
 *  
 */  

using UnityEngine;  
using UnityEditor;  
using System.Diagnostics;  

public class UnitySVN  
{  
    private const string COMMIT = "commit";  
    private const string UPDATE = "update";  

    private const string SVN_COMMIT = "Assets/SVN/Commit";  
    private const string SVN_COMMIT_ALL = "Assets/SVN/CommitAll";  
    private const string SVN_UPDATE = "Assets/SVN/Update";  
    private const string SVN_UPDATE_ALL = "Assets/SVN/UpdateAll";  

    /// <summary>  
    /// 创建一个SVN的cmd命令  
    /// </summary>  
    /// <param name="command">命令(可在help里边查看)</param>  
    /// <param name="path">命令激活路径</param>  
    public static void SVNCommand(string command, string path)  
    {  
        //closeonend 2 表示假设提交没错,会自动关闭提交界面返回原工程,详细描述可在  
        //TortoiseSVN/help/TortoiseSVN/Automating TortoiseSVN里查看  
        string c = "/c tortoiseproc.exe /command:{0} /path:\"{1}\" /closeonend 2";  
        c = string.Format(c, command, path);  
        ProcessStartInfo info = new ProcessStartInfo("cmd.exe", c);  
        info.WindowStyle = ProcessWindowStyle.Hidden;  
        Process.Start(info);  
    }  
    /// <summary>  
    /// 提交选中内容  
    /// </summary>  
    [MenuItem(SVN_COMMIT)]  
    public static void SVNCommit()  
    {  
        SVNCommand(COMMIT, GetSelectedObjectPath());  
    }  
    /// <summary>  
    /// 提交全部Assets文件夹内容  
    /// </summary>  
    [MenuItem(SVN_COMMIT_ALL)]  
    public static void SVNCommitAll()  
    {  
        SVNCommand(COMMIT, Application.dataPath);  
    }  
    /// <summary>  
    /// 更新选中内容  
    /// </summary>  
    [MenuItem(SVN_UPDATE)]  
    public static void SVNUpdate()  
    {  
        SVNCommand(UPDATE, GetSelectedObjectPath());  
    }  
    /// <summary>  
    /// 更新全部内容  
    /// </summary>  
    [MenuItem(SVN_UPDATE_ALL)]  
    public static void SVNUpdateAll()  
    {  
        SVNCommand(UPDATE, Application.dataPath);  
    }  

    /// <summary>  
    /// 获取全部选中物体的路径  
    /// 包括meta文件  
    /// </summary>  
    /// <returns></returns>  
    private static string GetSelectedObjectPath()  
    {  
        string path = string.Empty;  

        for (int i = 0; i < Selection.objects.Length; i++)  
        {  
            path += AssetsPathToFilePath(AssetDatabase.GetAssetPath(Selection.objects[i]));  
            //路径分隔符  
            path += "*";  
            //meta文件  
            path += AssetsPathToFilePath(AssetDatabase.GetAssetPath(Selection.objects[i])) + ".meta";  
            //路径分隔符  
            path += "*";  
        }  

        return path;  
    }  
    /// <summary>  
    /// 将Assets路径转换为File路径  
    /// </summary>  
    /// <param name="path">Assets/Editor/...</param>  
    /// <returns></returns>  
    public static string AssetsPathToFilePath(string path)  
    {  
        string m_path = Application.dataPath;  
        m_path = m_path.Substring(0, m_path.Length - 6);  
        m_path += path;  

        return m_path;  
    }  

}  
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • WC:Working Copy 你的工作区 Versioned:受控的;受版本控制的 SVN是什么? SVN是开源...
    Programmer客栈阅读 3,978评论 0 4
  • 从8月中旬到现在12月底,四个多月的时间,经历团队组建、引擎熟悉、基础工作流搭建、核心Demo开发以及一些技术预研...
    董夕阅读 9,129评论 9 37
  • 命令的使用 1、检出 svn cohttp://路径(目录或文件的全路径)[本地目录全路径] --username...
    小李龍彪阅读 9,870评论 0 9
  • 毕业季,点火樱桃。大海,紫薇。 傍晚去海边散步。不同天气,不同景色。 紫薇,粉,紫,红。 青大的夏,绣球花后,紫薇...
    待烤的寒鱼阅读 1,280评论 0 0
  • 昨天我遇到了一个问题。 就是我的国贷从来没有收到款,而比我迟办或者早办的人都收到了。 我害怕去跟辅导员反应,因为我...
    爱所有的一切阅读 3,746评论 0 0