如何查看tfs中本地文件是否为最新版本

本文关键字:是否 最新版 新版本 文件 何查看 tfs | 更新日期: 2023-09-27 17:49:18

我希望能够查询TfsTeamProjectCollection并确定服务器上是否有较新版本的文件。我希望能够做到这一点,而无需实际获取文件。

这是可能的地方吗?到目前为止,我已经画了一些空白。

谢谢。

如何查看tfs中本地文件是否为最新版本

最简单的方法是在工作区版本和最新版本之间切换QueryHistory;如果不一致,则表示服务器上存在较新的最新版本。如:

versionControlServer.QueryHistory(
    serverPath,
    VersionSpec.Latest,
    0,
    RecursionType.Full,
    new WorkspaceVersionSpec(workspace),
    versionFrom,
    null,
    Int32.MaxValue,
    true,
    true);

这是另一种检查给定文件是否最新的方法。

string file_path = @"your_file_path";
WorkspaceInfo info = Workstation.Current.GetLocalWorkspaceInfo(file_path);
Workspace ws = info.GetWorkspace(new TfsTeamProjectCollection(info.ServerUri));
GetStatus status = ws.Get( new GetRequest(
                                          new ItemSpec ( file_path, RecursionType.Full ), 
                                          VersionSpec.Latest ), 
                            GetOptions.Preview );
if(status.NoActionNeeded)
     MessegeBox.Show("Latest");
else
     MessegeBox.Show("Not Latest");
<<p> 步骤/strong>

1)我们需要得到包含文件路径的Workspace。我们使用

Workstation.GetLocalWorkspaceInfo Method (String)

获取WorkspaceInfo对象,该对象包含包含指定文件的工作区的属性。

我们可以使用这个WorkspaceInfo对象通过使用

来获取该工作区的实例

WorkspaceInfo.GetWorkspace Method (TfsTeamProjectCollection)

2)现在我们需要对工作空间对象执行Get操作。

Workspace.Get Method (GetRequest[], GetOptions)

第二个形参GetOptions有六个可能的成员值。每个人都有一个目的。

既然你不需要下载文件,

使用Executes a get without modifying the disk.

的成员值 Preview

3) Get操作返回一个代表Workspace.Get操作状态的GetStatus对象。

这包含了当Get操作被处理时发生了多少操作、冲突、错误等信息。

GetStatus对象有许多属性。我们使用了一个名为 NoActionNeeded 的属性,它获得一个标志,表示是否没有发生失败和操作。

如果没有操作或错误发生,标志值将为True。也就是说,文件已经是最新版本了。否则标志将为False,这意味着该文件不是TFS中可用的最新版本。

//我们必须指定已经映射到本地工作区的文件,以便在这里进行比较

            var serverPath = workspace.GetServerItemForLocalItem(Vars.sLocalPath);
            var serverVersion = new DiffItemVersionedFile(versionControlServer, serverPath, VersionSpec.Latest);
            var localVersion = new DiffItemLocalFile(Vars.sLocalPath, System.Text.Encoding.UTF8.CodePage, DateTime.Now, false);
            try
            {
                using (var stream = new MemoryStream())
                using (var writer = new StreamWriter(stream))
                {
                    var diffOptions = new DiffOptions
                    {
                        Flags = DiffOptionFlags.EnablePreambleHandling,
                        OutputType = DiffOutputType.Unified,
                        TargetEncoding = System.Text.Encoding.UTF8,
                        SourceEncoding = System.Text.Encoding.UTF8,
                        StreamWriter = writer
                    };
                    Difference.DiffFiles(versionControlServer, serverVersion, localVersion, diffOptions, serverPath, true);
                    writer.Flush();
                    diff = System.Text.Encoding.UTF8.GetString(stream.ToArray());
                    if (diff != "")
                    {
                        newutils.WriteLogFile("Vars.enumExitCode.Success");
                        iRtnCode = (int)Vars.enumExitCode.Success;
                        return iRtnCode;
                    }
                }
            }
            catch (Exception)
            {
            }