TF.exe创建文件夹而不是分支

4

我在我的C#代码中使用tf.exe来在TFS中创建新分支。我的操作步骤如下:

public static bool TFBranch(string projectPath, string originName, string branchName)
{
    string branchedProject = projectPath + "\\" + branchName;

    string projectToBranch = projectPath + "\\" + originName;

    string path = Environment.ExpandEnvironmentVariables(@"branch " + projectToBranch + " " + branchedProject);
    path = path.Replace("\\", "/");

    return ExecuteProcess(path);
}

private static bool ExecuteProcess(string path)
{
    MyProcess proc = new MyProcess();

    var currentDirectory = WorkspaceHandler.GetLocalWorkspace();

    var command = @"C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\tf.exe";

    Directory.SetCurrentDirectory(currentDirectory);
    proc.FileName = command;
    proc.Arguments = path;

    try
    {
        proc.Execute();
    }
    catch (Exception e)
    {
        _Logger.Error("Could not execute TF.exe. Exception: " + e.ToString());
        return false;
    }

    return true;
}

大部分工作都如我所期望的那样运行。我从一个已经包含分支的目录中创建一个分支,因此新的分支也包含一个分支。但有时tf.exe会创建一个文件夹而不是一个分支。这是tf.exe的错误还是我做错了什么?

例如:

以下是一个分支命令的样子:

enter image description here

enter image description here

-- 编辑 --

以下是我手动操作的步骤:

  1. 使用菜单进入模板/分支源/文件夹/主文件夹:

enter image description here

  1. 在对话框中定义“目标分支名称”:

enter image description here

  1. 结果与我预期得到的相同:

enter image description here

这是使用我的代码得到的相同结果。唯一的区别是代码有时会创建一个文件夹。

你是否手动使用tf branch命令进行测试?我已经在TFS 2013.5+VS2013.5上进行了测试,tf branch命令只能创建文件夹图标,而不能创建分支图标。 - Cece Dong - MSFT
我也尝试过了。无论是手动尝试还是使用我的代码,它总是创建一个分支图标。只是有时它会创建一个文件夹,而我无法重现这种行为。它似乎只是随机发生。 - L4c0573
你的环境和我的一样吗?我总是在我的侧边栏上看到文件夹图标。 - Cece Dong - MSFT
是的,我也使用 TFS 2013 和 VS 2013 Update 5。 - L4c0573
手动使用tf branch命令如何?不要从UI界面操作,从UI界面可以获取分支图标。 - Cece Dong - MSFT
显示剩余4条评论
1个回答

2

tf.exe无法完成此操作,但在创建分支后,你可以使用来自Power Tools的tfpt.exe(或从Visual Studio的源代码控制资源管理器中)进行操作:

tfpt branches /convertToBranch

另请参阅:


是的,我也在考虑在分支后将文件夹转换为分支,但这对我来说似乎很不合适。我的意思是,如果第一次能够成功运行,那么第二次也应该能够成功运行。如果我再做第三次,那么tf.exe会按照我的期望创建一个新的分支。 - L4c0573
我不认为tf.exe尝试任何特别的事情,它只是在服务器上调用CreateBranch函数并等待结果。 - jessehouwing
我也这么认为。但是,当我手动从已转换为分支的文件夹中进行分支时,新文件夹也应该是一个分支。或者我错了吗?正如您在我的示例中所看到的,我从Templates/BranchSource/Folder/Main进行分支,而Main已经是一个分支。如果我是正确的,那么SecondBranchedFolder/Folder/Main中的Main文件夹也应该是一个分支而不是文件夹。 - L4c0573
据我所知没有这样的选项。我相信从用户界面复选框默认是启用的,但从命令行则没有这样的复选框。 - jessehouwing
是的,没有复选框。但正如我在问题中所说,我的代码运行良好。从十次中约有九次,分支都按照我期望的方式分支。正如您可以在FirstBranchedFoler / Folder / Main中看到的那样。这是由使用TF.exe的代码创建的,没有任何复选框。但有时它似乎非常随机地不按照我希望的方式工作。我只想知道为什么有时会创建一个分支,有时会创建一个文件夹。 - L4c0573
这不是我最初想要的,但它解决了我的问题。现在没有分支作为文件夹存在了。如果有人知道 tf.exe 为什么有时会生成文件夹,有时会生成分支,请告诉我 :) ! - L4c0573

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接