关闭

Unity 右键快捷进行SVN操作

标签: unitysvn
1437人阅读 评论(0) 收藏 举报
分类:

原因

Unity 项目使用 SVN 进行版本管理,每当需要更新或提交文件的时候,都需要切换到 Windows 资源管理器,进入项目文件夹里面进行 SVN 操作,非常繁琐。

方法

直接集成 SVN 操作到 Unity 里面,在 Project 视图里,实现右键快捷进行 SVN 操作。

这里写图片描述

使用的是 TortoiseSVN 提供的命令行方式,详细参数说明可以查看:https://tortoisesvn.net/docs/release/TortoiseSVN_zh_CN/tsvn-automation.html#tsvn-automation-basics

步骤

新建编辑器脚本文件SVNTool.cs

using System;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;

namespace Tools
{
    public static class SVNTool
    {
        /// <summary>
        /// SVN更新指定的路径
        /// 路径示例:Assets/1.png
        /// </summary>
        /// <param name="assetPaths"></param>
        public static void UpdateAtPath(string assetPath)
        {
            List<string> assetPaths = new List<string>();
            assetPaths.Add(assetPath);
            UpdateAtPaths(assetPaths);
        }

        /// <summary>
        /// SVN更新指定的路径
        /// 路径示例:Assets/1.png
        /// </summary>
        /// <param name="assetPaths"></param>
        public static void UpdateAtPaths(List<string> assetPaths)
        {
            if (assetPaths.Count == 0)
            {
                return;
            }

            string arg = "/command:update /closeonend:0 /path:\"";
            for (int i = 0; i < assetPaths.Count; i++)
            {
                var assetPath = assetPaths[i];
                if (i != 0)
                {
                    arg += "*";
                }
                arg += assetPath;
            }
            arg += "\"";
            SvnCommandRun(arg);
        }

        /// <summary>
        /// SVN提交指定的路径
        /// 路径示例:Assets/1.png
        /// </summary>
        /// <param name="assetPaths"></param>
        public static void CommitAtPaths(List<string> assetPaths, string logmsg = null)
        {
            if (assetPaths.Count == 0)
            {
                return;
            }

            string arg = "/command:commit /closeonend:0 /path:\"";
            for (int i = 0; i < assetPaths.Count; i++)
            {
                var assetPath = assetPaths[i];
                if (i != 0)
                {
                    arg += "*";
                }
                arg += assetPath;
            }
            arg += "\"";
            if (!string.IsNullOrEmpty(logmsg))
            {
                arg += " /logmsg:\"" + logmsg + "\"";
            }
            SvnCommandRun(arg);
        }

        [MenuItem("Assets/SVN Tool/SVN 更新")]
        private static void SvnToolUpdate()
        {
            List<string> assetPaths = SelectionUtil.GetSelectionAssetPaths();
            UpdateAtPaths(assetPaths);
        }

        [MenuItem("Assets/SVN Tool/SVN 提交...")]
        private static void SvnToolCommit()
        {
            List<string> assetPaths = SelectionUtil.GetSelectionAssetPaths();
            CommitAtPaths(assetPaths);
        }

        [MenuItem("Assets/SVN Tool/显示日志")]
        private static void SvnToolLog()
        {
            List<string> assetPaths = SelectionUtil.GetSelectionAssetPaths();
            if (assetPaths.Count == 0)
            {
                return;
            }

            // 显示日志,只能对单一资产
            string arg = "/command:log /closeonend:0 /path:\"";
            arg += assetPaths[0];
            arg += "\"";
            SvnCommandRun(arg);
        }

        [MenuItem("Assets/SVN Tool/全部更新", false, 1100)]
        private static void SvnToolAllUpdate()
        {
            // 往上两级,包括数据配置文件
            string arg = "/command:update /closeonend:0 /path:\"";
            arg += "..";
            arg += "\"";
            SvnCommandRun(arg);
        }

        [MenuItem("Assets/SVN Tool/全部日志", false, 1101)]
        private static void SvnToolAllLog()
        {
            // 往上两级,包括数据配置文件
            string arg = "/command:log /closeonend:0 /path:\"";
            arg += "..";
            arg += "\"";
            SvnCommandRun(arg);
        }

        /// <summary>
        /// SVN命令运行
        /// </summary>
        /// <param name="arg"></param>
        private static void SvnCommandRun(string arg)
        {
            string workDirectory = Application.dataPath.Remove(Application.dataPath.LastIndexOf("/Assets", StringComparison.Ordinal));
            System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo
            {
                UseShellExecute = false,
                CreateNoWindow = true,
                FileName = "TortoiseProc",
                Arguments = arg,
                WorkingDirectory = workDirectory
            });
        }
    }
}

新建编辑器脚本文件SelectionUtil.cs

using System;
using System.Collections.Generic;
using UnityEditor;

public class SelectionUtil
{
    /// <summary>
    /// 得到选中资产路径列表
    /// </summary>
    /// <returns></returns>
    public static List<string> GetSelectionAssetPaths()
    {
        List<string> assetPaths = new List<string>();
        // 这个接口才能取到两列模式时候的文件夹
        foreach (var guid in Selection.assetGUIDs)
        {
            if (string.IsNullOrEmpty(guid))
            {
                continue;
            }

            string path = AssetDatabase.GUIDToAssetPath(guid);
            if (!string.IsNullOrEmpty(path))
            {
                assetPaths.Add(path);
            }
        }

        return assetPaths;
    }
}
0
0
查看评论

Unity项目对 git版本控制库扩展插件

孙广东 2015.6.14  在UNity5.x之前的版本, 我们用文本编辑器如 sublime text 打开.unity  .prefab时是可以看到 yaml格式的文本内容,  但是在 UNity5.x 当在察看.unity  .prefab文件时已经变...
  • u010019717
  • u010019717
  • 2015-06-14 12:23
  • 3319

SvnToolsLite unity多人协同开发插件

  • 2017-11-20 10:08
  • 140KB
  • 下载

使用SVN进行Unity3d版本管理总结

使用Unity3D也有一段时间了,由于团队一直使用SVN进行版本管理,现总结一下: (1) Unity3D的二进制资源必须加锁进行版本控制,因为它没办法merge; (2) Unity3D自己产生的C#工程相关文件,包括VS产生或者Mono产生的,都不需要归入版本控制; (3) 在...
  • programmerboymxd
  • programmerboymxd
  • 2012-03-11 18:26
  • 8393

Unity SVN 管理(一)

Unity项目SVN管理:因为项目一直都是乱七八糟的,之前在做网站开发的时候,有过一部分SVN的管理经验,之前架设过一个SVN服务器,但是因为项目只有两个人开发,就使用了一段时间之后就不再使用了。现在逐渐的项目变得比较多,而且,安卓和IOS项目的有所不同,我重新开启了SVN服务器。将这段时间所建的项...
  • DerXiu_Xiu
  • DerXiu_Xiu
  • 2016-08-30 14:50
  • 812

使用SVN进行Unity3d版本管理总结

使用Unity3D也有一段时间了,由于团队一直使用SVN进行版本管理,现总结一下: (1) Unity3D的二进制资源必须加锁进行版本控制,因为它没办法merge; (2) Unity3D自己产生的C#工程相关文件,包括VS产生或者Mono产生的,都不需要归入版本控制; (3) 在...
  • ycl295644
  • ycl295644
  • 2016-04-25 08:55
  • 3135

在Unity里内嵌SVN基本操作

假设版本控制使用的是TortoiseSVN,频繁切换Unity工程与文件夹是一个很令人懊恼的事情,能不能在Unity当中调用SVN基础操作呢?答案是可以的。通过几个简单的命令行,就可以极大节省时间成本。代码如下: /* * 将TortoiseSVN的基础操作内嵌Unity * 这里只是举了几个...
  • mlkmx
  • mlkmx
  • 2016-05-26 18:35
  • 1478

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

Unit3D项目使用SVN作为版本管理时需要注意的事项。
  • Neil3D
  • Neil3D
  • 2014-08-13 10:09
  • 10681

Unity Editor 编辑器扩展 十四 将TortoiseSVN的基础操作内嵌Unity

集成svn同步工具,非常好用/* * 将TortoiseSVN的基础操作内嵌Unity * 这里只是举了几个简单的例子 * 具体命令可参见TortoiseSVN的help功能 * */ using UnityEngine; using UnityEditor; usi...
  • WarrenMondeville
  • WarrenMondeville
  • 2017-01-23 13:14
  • 523

【Unity/SVN】使用SVN管理Unity项目

追踪Assets和ProjectSettings这两个文件夹
  • qq_18995513
  • qq_18995513
  • 2017-05-05 09:17
  • 844

如何用 svn 管理 unity3d 项目

因为svn用惯了, asset server还是收费的,所以这个版本还是使用svn来管理unity3d的工程,刚开始的时候各种问题,丢失场景啊,丢失纹理贴图等等。被折腾了好久,我终于抽时间去官网上看了下,并且按照官网设置,用了几个月,感觉很稳定,所以存档记录,并分享给大家。   ...
  • smilelance
  • smilelance
  • 2012-11-19 15:16
  • 5536
    个人资料
    • 访问:3556394次
    • 积分:36087
    • 等级:
    • 排名:第136名
    • 原创:402篇
    • 转载:88篇
    • 译文:5篇
    • 评论:3425条
    个人说明
    联系方式:
    文章存档
    最新评论