0

在搜索谷歌几个小时后,我找到了我的问题的答案。我知道这篇Undo checkout TFS帖子回答了我的问题,但它并没有回答我的所有问题。我想实现与帖子提出的相同目标。如果该文件中没有任何修改,如何仅恢复已签出的文件?我的问题的答案应该不会太难回答。

所以我正在做的是从服务器复制文件并在我的本地工作区中覆盖它们。我正在检查所有正在复制的文件。但是,如果复制的文件无论如何都没有被修改(服务器文件和目标文件完全相同),我想撤消该文件的签出。

我知道我要使用 workspace.Undo() 方法,这位先生说它对他有用。但是他没有说明他是如何实现它的。

这是我在链接帮助下获得的代码:

public static void CheckOutFromTFS(string filepath)
{
    var workspaceInfo = Workstation.Current.GetLocalWorkspaceInfo(filepath);
    if (workspaceInfo == null)
    {
        return;
    }
    var server = new TfsTeamProjectCollection(workspaceInfo.ServerUri);
    var workspace = workspaceInfo.GetWorkspace(server);
    workspace.PendEdit(filepath);
}

给出的答案是使用 workspace.Undo() 方法。我是否像这样将此方法添加为 CheckOutFromTFS() 的最后一行?

public static void CheckOutFromTFS(string filepath)
{
    var workspaceInfo = Workstation.Current.GetLocalWorkspaceInfo(filepath);
    if (workspaceInfo == null)
    {
        return;
    }
    var server = new TfsTeamProjectCollection(workspaceInfo.ServerUri);
    var workspace = workspaceInfo.GetWorkspace(server);
    workspace.PendEdit(filepath);
    workspace.Undo();
}

还是做的不同?我不确定这个 Undo() 是否只会在没有更改的情况下恢复文件,或者只是完全恢复结帐并使 PendEdit() 无用。有人可以帮我澄清一下吗?

4

3 回答 3

0

如果您使用本地工作区,则所有没有更改的文件将自动恢复为未签出。你根本不需要做任何事情。这适用于 VS 2012 或更好的 TFS 2012 或更高版本。您需要先将工作区转换为本地工作区,如下所示

在此处输入图像描述

于 2015-03-02T21:28:22.520 回答
0

所以我在各种帖子中找到了我的问题的答案。我有点拿了一些碎片并将它们组合在一起以获得我的工作解决方案。使用 Undo() 函数并传入文件路径实际上会取消签出文件,无论它是否被修改。我的工作区也是本地的,但是 VS 和 TFS 无法为我自动还原那些未修改的文件,所以我采用了以下方法。

所以我决定只使用 Team Foundation Power Tools“uu”命令来撤消对工作区中未更改文件的更改。我创建了一个批处理文件并输入了以下命令:echo y | tfpt uu . /noget /recursive. 由于我们不会在执行过程中显示 shell,我使用“echo y”命令自动回答问题,“您希望撤消这些多余的挂起更改吗?(Y/N)”。强烈建议包含 /noget ,因为它可以防止强制“获取最新”所有项目文件,这取决于总数可能需要很长时间。

 var startInfo = new System.Diagnostics.ProcessStartInfo
 {
     WorkingDirectory = projectRoot,
     FileName = projectRoot + @"\undoUnchanged.bat",
     UseShellExecute = false,
     CreateNoWindow = true
 };
 Process process = Process.Start(startInfo);
 process.WaitForExit();
 process.Close();

在脚本运行并且 process.Close() 执行您并通过单击项目中团队资源管理器窗口上的刷新按钮来仔细检查您的未修改文件是否实际上未被检出后。希望其他人可以在此找到一些用处。

于 2015-03-04T17:40:57.280 回答
0

如果我很好地理解了这个问题并且您实际上需要通过后面的 C# 代码撤消,我相信这应该可以帮助您:

撤消结帐 TFS

于 2016-07-04T15:11:49.780 回答