【问题标题】:Programmatically Merging using TeamFoundationClient TFS2008 and VS2010使用 TeamFoundation Client TFS 2008 和 VS2010 以编程方式合并
【发布时间】:2015-01-27 11:25:44
【问题描述】:

我有用于 VS 2010 的 Addin VS(可能在未来的 VSIX 中)。 我想做任何单个文件(sql文件)的分支,然后以编程方式合并。

我见过几个选项:

GetStatus status = workspace.Merge

How to merge TFS change sets programmatically?

http://blogs.microsoft.co.il/shair/2009/04/20/tfs-api-part-19-merge/

MergeContent(Conflict, true);

workspace.Merge 可以显示合并的对话框模式(我认为是 diffmerge.exe)并显示结果(解决冲突)?注意:就我而言,现在,我想要显示合并工具。

TFS API MergeContent returns false without showing merge tool

有tf命令(命令行,不是C##

tf 差异[erence] itemspec [/version:versionspec]

tf 合并 [/recursive] [/force] [/candidate] [/discard] [/version:versionspec] [/lock:none|checkin|checkout] [/preview] [/baseless] [/nosummary] [/noimplicitbaseless] [/conservative] [/格式:(简要|详细)] [/noprompt] [/登录:用户名,[密码]] 源目的地

tf 解析 [itemspec]

[/auto:(AutoMerge|TakeTheirs|KeepYours|

覆盖本地|删除冲突

|KeepYoursRenameTheirs)]

[/preview] [(/overridetype:overridetype | /converttotype:converttype] [/递归]

[/newname:path] [/noprompt]

[/login:用户名,[密码]]

关于合并文件的任何建议,以及必须选项:

1) 显示合并对话框(diffmerge)

2) 自动,不显示用于合并(diffmerge 或其他?)和解决冲突的对话框。

【问题讨论】:

    标签: c# tfs merge


    【解决方案1】:

    从 Visual Studio 安装目录 C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE 中的 App Exe 文件中复制 vsDiffMerge.exe

    var mergetool = new ThirdPartyToolDefinition(".*",ToolOperations.Merge,"vsDiffMerge.exe","","/m %1 %2 %3 %4");
    var toolcol= ThirdPartyToolDefinitionCollection.Instance.FindTool(".*",ToolOperations.Merge);
    if (toolcol == null)
       {
       ThirdPartyToolDefinitionCollection.Instance.AddTool(mergetool);
       ThirdPartyToolDefinitionCollection.Instance.PersistAllToRegistry();
       }
    
    var controlsAssembly = Assembly.GetAssembly(typeof(ControlAddItemsExclude));
    var vcResolveCoinflictsDialogType = controlsAssembly.GetType("Microsoft.TeamFoundation.VersionControl.Controls.DialogResolveConflicts");
    var ci = vcResolveCoinflictsDialogType.GetConstructor(BindingFlags.Instance | BindingFlags.Public, null, new[] { typeof(Workspace), typeof(string[]), typeof(bool) }, null);
    var resolveCoinflictsDialog = (Form)ci.Invoke(new object[] { workspace, null, true });
    resolveCoinflictsDialog.ShowDialog(parent);
    
    ThirdPartyToolDefinitionCollection.Instance.Remove(mergetool);
    ThirdPartyToolDefinitionCollection.Instance.PersistAllToRegistry();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-05
      • 2012-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-05
      • 2015-05-15
      相关资源
      最近更新 更多