网址:
https://sharpsvn.open.collab.net/
http://brandocode.com/?p=112
1
2
3
4
5
6
7
8
|
static string assetPaht = Application.dataPath;
static string buildPath = Directory.GetParent(assetPaht).FullName;
//更新指定文件夹
System.Diagnostics.Process.Start("TortoiseProc.exe", @"/command:update /pat:" + buildPath);
//提交指定文件夹
System.Diagnostics.Process.Start("TortoiseProc.exe", @"/command:commit /path:" + buildPath);
|
后继补充篇
最近需要写一个让策划远程打包unity的程序,就是策划只要在自己电脑发一条命令到服务端,然后服务端就会调用已经安装好的unity一键打包并上传到SVN,那么我们需要让自己写的程序处理完提交、解决冲突、处理删除文件等操作,于是乎DOS这种只是对SVN进行最简单的调用打开SVN界面去操作的话是很繁琐的。
我们需要直接调用SVN接口,我们可以借助SVN第三方包装库SharpSvn(C#)、svnkit(java),因为我用的是C#,所以下面是以SharpSvn为基础来写,首先先提供一些SharpSvn最基本的SVN操作。(注意,目标框架需要是Framework 2.0, 不然报错)
先添加引用SharpSvn.dll到项目,然后using SharpSvn就行了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
// 更新SVN
void UpdateSvn()
{
string path = "D:\Test";
SvnClient client = new SvnClient();
client.Update(path);
}
// 清理SVN
void CleanSvn()
{
string path = "D:\Test";
SvnClient client = new SvnClient();
client.CleanUp(path);
}
//提交SVN
void CommitSvn()
{
string path = "D:\Test";
SvnClient client = new SvnClient();
SvnCommitArgs comArgs = new SvnCommitArgs();
comArgs.LogMessage = "这里输入你的提交信息";
client.Commit(path);
}
//处理有问题的文件
void QuestionFile()
{
string path = "D:\Test";
SvnClient client = new SvnClient();
SvnStatusArgs sa = new SvnStatusArgs();
Collection<SvnStatusEventArgs> status;
client.GetStatus(path, sa, out status);
foreach (var item in status)
{
string fPath = item.FullPath;
if (item.LocalContentStatus != item.RemoteContentStatus)
{
//被修改了的文件
}
if (!item.Versioned)
{
//新增文件
client.Add(fPath);
}
else if (item.Conflicted)
{
//将冲突的文件用工作文件解决冲突
client.Resolve(fPath, SvnAccept.Working);
}
else if (item.IsRemoteUpdated)
{
//更新来自远程的新文件
client.Update(fPath);
}
else if (item.LocalContentStatus == SvnStatus.Missing)
{
//删除丢失的文件
client.Delete(fPath);
}
}
}
//获取SVN上最新150条的提交日志信息
string GetSvnLog()
{
string path = "D:\Test";
SvnClient client = new SvnClient();
SvnLogArgs logArgs = new SvnLogArgs();
logArgs.RetrieveAllProperties = false; //不检索所有属性
Collection<SvnLogEventArgs> status;
client.GetLog(path, logArgs, out status);
int messgNum = 0;
string logText = "";
string lastLog = "";
foreach (var item in status)
{
if (messgNum > 150)
break;
messgNum += 1;
if (string.IsNullOrEmpty(item.LogMessage) || item.LogMessage == " " || lastLog == item.LogMessage)
{
continue;
}
logText = item.Author + ":" + item.LogMessage + "
" + logText;
lastLog = item.LogMessage;
}
return logText;
}
|
更详细的SharpSvn API文档:http://docs.sharpsvn.net/current/
以下是我当初参考的别人关于SharpSvn的栗子:
http://www.cnblogs.com/goody9807/archive/2012/11/01/2749938.html
http://www.cnblogs.com/lienhua34/p/3917787.html
http://www.cokco.cn/thread-414-1-1.html
扩展阅读
我们现在知道怎么用自己的程序调用SVN处理基本的操作了,但还需要很关键的一步,就是要让自己的程序去调用unity的打包函数,不过这一步很简单,unity有提供命令行的方式调用其内部所有编译好的函数(虽然也是用比较操蛋的DOS去实现,但事情先往简单的方法去做吧)。
1
2
3
4
|
string unityPath = @"E:unity4.6Unity.exe"; //unity的位置
string projectPaht = @"F:Unity ProjectTest"; //要打开的unity项目地址
string funcName = "Build.BuildWindows"; //要调用的函数名字
System.Diagnostics.Process.Start(unityPath, @" -projectPath " + projectPaht + " -quit -batchmode -executeMethod " + funcName);
|
更详细的关于untiy 的命令行参数:http://www.ceeger.com/Manual/CommandLineArguments.html
Posted in C#语言