如何以编程方式集成 2 个分支
How to integrate 2 branches programatically
我的仓库中有 2 个分店。
//depot/project/mainline/...
//depot/project/staging/...
我正在使用管理项目构建的内部工具,并希望创建一个构建步骤,自动将所有文件从主线提升到暂存区。我一直在尝试使用 p4.net API 来编写它,遵循以下 example。我能够从构建工具中 运行 powershell 命令。我的计划是编写一个 c# 控制台应用程序,使用该工具对其进行编译,然后将其作为构建步骤执行。不幸的是,我对这个例子一无所知。我能够创建客户端、创建分支规范甚至同步文件,但我终究无法弄清楚如何提交集成。
我觉得我正在尝试过度设计解决方案的想法。这是一件应该很容易做到的事情。我在下面附上我的损坏代码。如果它没有意义,那是因为我正在使用反复试验来找出问题并且还没有最终通过它。也就是说,如果我不需要使用 p4 api,那就更好了。唯一的要求是 运行 命令不需要用户输入。如果有合并冲突,我想自动接受源
谢谢
string uri = "server";
string user = "user";
string pass = null;
string ws_client = "Project-Temp-"+ Guid.NewGuid().ToString();
Server server = new Server(new ServerAddress(uri));
Repository rep = new Repository(server);
Connection con = rep.Connection;
con.UserName = user;
con.Client = new Client();
con.Client.Name = ws_client;
con.Client.ViewMap = new ViewMap();
con.Connect(null);
Credential cred = con.Login(pass, null, null);
rep.DeleteClient(con.Client, null);
rep.CreateClient(con.Client);
con.Client.ViewMap.Clear();
con.Client.ViewMap.Add("//depot/project/...", String.Format("//{0}/...", con.Client.Name), MapType.Include);
rep.UpdateClient(con.Client);
var files = con.Client.SyncFiles(new SyncFilesCmdOptions(SyncFilesCmdFlags.None, -1));
ViewMap vm = new ViewMap();
vm.Add(new MapEntry(MapType.Include,new ClientPath("//depot/project/mainline/..."), new ClientPath("//depot/project/staging/...")));
string msg = "Mainline to Staging";
BranchSpec bs = new BranchSpec("Project-Temp", user, DateTime.Now, DateTime.Now, msg, true, vm, null, null);
int change = -1;
IntegrateFilesCmdOptions BranchOptions = new IntegrateFilesCmdOptions(IntegrateFilesCmdFlags.None, change, -1, "Project-Temp", null, null);
rep.CreateBranchSpec(bs);
rep.UpdateClient(con.Client);
var integrated = con.Client.IntegrateFiles(BranchOptions);
con.Client.ResolveFiles(files, new ResolveCmdOptions(ResolveFilesCmdFlags.AutomaticYoursMode, change));
rep.DeleteClient(con.Client, null);
从命令行是:
p4 integrate //depot/project/mainline/... //depot/project/staging/...
p4 resolve -am
p4 resolve -at
p4 resolve -ay
p4 submit -d "Integrate."
"resolve -am" 自动合并所有文件而不会发生冲突。
"resolve -at" 接受所有剩余文件的来源。
在极少数情况下存在无法接受的源文件(例如,源修订已被删除,或者源和目标操作不兼容),"resolve -ay" 将忽略它们。
我的仓库中有 2 个分店。
//depot/project/mainline/...
//depot/project/staging/...
我正在使用管理项目构建的内部工具,并希望创建一个构建步骤,自动将所有文件从主线提升到暂存区。我一直在尝试使用 p4.net API 来编写它,遵循以下 example。我能够从构建工具中 运行 powershell 命令。我的计划是编写一个 c# 控制台应用程序,使用该工具对其进行编译,然后将其作为构建步骤执行。不幸的是,我对这个例子一无所知。我能够创建客户端、创建分支规范甚至同步文件,但我终究无法弄清楚如何提交集成。 我觉得我正在尝试过度设计解决方案的想法。这是一件应该很容易做到的事情。我在下面附上我的损坏代码。如果它没有意义,那是因为我正在使用反复试验来找出问题并且还没有最终通过它。也就是说,如果我不需要使用 p4 api,那就更好了。唯一的要求是 运行 命令不需要用户输入。如果有合并冲突,我想自动接受源
谢谢
string uri = "server";
string user = "user";
string pass = null;
string ws_client = "Project-Temp-"+ Guid.NewGuid().ToString();
Server server = new Server(new ServerAddress(uri));
Repository rep = new Repository(server);
Connection con = rep.Connection;
con.UserName = user;
con.Client = new Client();
con.Client.Name = ws_client;
con.Client.ViewMap = new ViewMap();
con.Connect(null);
Credential cred = con.Login(pass, null, null);
rep.DeleteClient(con.Client, null);
rep.CreateClient(con.Client);
con.Client.ViewMap.Clear();
con.Client.ViewMap.Add("//depot/project/...", String.Format("//{0}/...", con.Client.Name), MapType.Include);
rep.UpdateClient(con.Client);
var files = con.Client.SyncFiles(new SyncFilesCmdOptions(SyncFilesCmdFlags.None, -1));
ViewMap vm = new ViewMap();
vm.Add(new MapEntry(MapType.Include,new ClientPath("//depot/project/mainline/..."), new ClientPath("//depot/project/staging/...")));
string msg = "Mainline to Staging";
BranchSpec bs = new BranchSpec("Project-Temp", user, DateTime.Now, DateTime.Now, msg, true, vm, null, null);
int change = -1;
IntegrateFilesCmdOptions BranchOptions = new IntegrateFilesCmdOptions(IntegrateFilesCmdFlags.None, change, -1, "Project-Temp", null, null);
rep.CreateBranchSpec(bs);
rep.UpdateClient(con.Client);
var integrated = con.Client.IntegrateFiles(BranchOptions);
con.Client.ResolveFiles(files, new ResolveCmdOptions(ResolveFilesCmdFlags.AutomaticYoursMode, change));
rep.DeleteClient(con.Client, null);
从命令行是:
p4 integrate //depot/project/mainline/... //depot/project/staging/...
p4 resolve -am
p4 resolve -at
p4 resolve -ay
p4 submit -d "Integrate."
"resolve -am" 自动合并所有文件而不会发生冲突。 "resolve -at" 接受所有剩余文件的来源。 在极少数情况下存在无法接受的源文件(例如,源修订已被删除,或者源和目标操作不兼容),"resolve -ay" 将忽略它们。