5

我希望能够询问 TfsTeamProjectCollection 并确定服务器上是否有更新版本的文件。我希望能够在不实际获取文件的情况下执行此操作。

这可能在某个地方吗?我已经做了一些刮擦,到目前为止还画了一些空白。

谢谢。

4

3 回答 3

3

最简单的方法是QueryHistory在工作区版本和最新版本之间切换;如果它们不同,则服务器上存在更新的最新版本。例如:

versionControlServer.QueryHistory(
    serverPath,
    VersionSpec.Latest,
    0,
    RecursionType.Full,
    new WorkspaceVersionSpec(workspace),
    versionFrom,
    null,
    Int32.MaxValue,
    true,
    true);
于 2013-08-07T14:43:14.727 回答
0

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

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");

脚步

1)我们需要获取Workspace包含文件路径的那个。我们用

Workstation.GetLocalWorkspaceInfo Method (String)

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

我们可以使用这个WorkspaceInfo对象来获取该工作区的实例,方法是使用

WorkspaceInfo.GetWorkspace Method (TfsTeamProjectCollection)

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

Workspace.Get Method (GetRequest[], GetOptions)

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

由于您不需要下载文件,

我们将使用成员PreviewExecutes a get without modifying the disk.

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

这包含有关在处理操作时发生了多少操作、冲突、错误等的信息Get

GetStatus对象有许多属性。我们使用名为的属性NoActionNeeded来获取一个标志,该标志指示是否没有发生故障和操作。

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

于 2018-02-01T14:02:38.817 回答
0

//我们必须指定已经映射到本地工作空间的文件,以便在此处进行比较

            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)
            {

            }
于 2019-04-02T11:13:30.677 回答