在搜索谷歌几个小时后,我找到了一个问题的答案。我知道这篇文章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()无效。有人可以帮我澄清一下吗?
答案 0 :(得分:0)
如果您使用本地工作区,则所有没有更改的文件将自动恢复为未签出。你根本不需要做任何事情。这适用于VS 2012或更好的TFS 2012或更高版本。您需要首先将工作区转换为本地工作区
答案 1 :(得分: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()执行您并通过点击项目中团队资源管理器窗口上的刷新按钮,仔细检查是否实际取消了未修改的文件。希望其他人能在这方面找到一些用处。
答案 2 :(得分:0)
如果我理解这个问题并且您实际上需要通过C#代码撤消,我相信这可以帮助您: