使用 TFS API 检测文件删除更改(自动,无需 VS 交互)

2024-03-14

我在 tfs 工作区中有一个本地文件夹并使用 TFS-API。

每天晚上我都会删除这个文件夹,然后将数据库脚本编写为 .sql 文件。 如果现在添加或编辑了某些内容,则会找到更改并进入待处理的更改以进行签入。

问题是我如何使用 TFS-API 检测到文件丢失(故意的,因为不再在数据库中并且不再编写脚本)。 第一步很明显,删除空文件夹中的所有文件和脚本。

我在开始时使用workspace.PendEdit,这使我能够覆盖来自外部的文件。 数据库脚本编写完成后,我将创建workspace.PendEdit 和workspace.PendAdd。

这按预期工作。但workspace.PendDelete 找不到已删除的文件,因此无法将这些文件添加为已删除到挂起的更改。

Power Tools for tfs 有一个命令行工具,它有一个在线标志,可以做到这一点,这就是我想要的。

我的问题:是否可以做到我用 tfs-api 描述的那样? 如果这不起作用,有人有使用此在线标志的经验吗?


简单的例子

我的本地文件夹中有两个文件:1.sql 和 2.sql 这两个文件最初被签入。

我删除了本地2.sql(不了解tfs) 我添加一个文件:3.sql 我编辑1.sql

现在,我使用workspace.PendEdit 和workspace PendAdd 来检测已编辑和添加的文件。这些文件将被很好地检测到。

问题是:2.sql 缺失的删除不会被检测到,因此无法在服务器上删除。

那么:如何在不了解tfs的情况下检测丢失的文件/本地删除的文件?

我希望这能澄清我的问题。

伪代码示例:

DeleteWorkspaceFolderContent(); // Because i do not delete but regenerate my Sql scripts.
GenerateSqlScriptsToWorkspaceFolder(); // .sql files are generated to the same folder, they were deleted before

// 此时此刻,我做到了workspace.PendAdd(localPath, true); and workspace.PendEdit(localPath, RecursionType.Full);它的工作方式就像一个sharm,因此新的.sql文件将等待添加和编辑(真正更改的脚本)等待“更改签入”。

// 此时我想workspace.PendDelete(new [] { localPath }, RecurstionType.Fulll);执行相同的操作:发现文件在本地丢失,然后将该文件挂起以在服务器上删除。但这并没有发生。没有添加待处理的更改。

var pendingChanges = workspace.GetPendingChanges(localPath, RecursionType.Full);

workspace.CheckIn(pendingChanges, "Per TFS-API, " + DateTime.Now.ToString());

您真正想做的是使用本地工作区并让 TFS 为您处理此问题。它将检测文件的修改、添加和删除,并自动为您挂起它们。

如果您想为此使用 TFS API,那么您将需要检查“候选挂起更改”(TFS 客户端已确定磁盘上存在的更改),然后将它们提升为实际挂起更改。例如:

PendingChange[] candidates;
workspace.GetPendingChangesWithCandidates(
    new ItemSpec[] { new ItemSpec(@"C:\Local\Path", RecursionType.Full) },
    false,
    out candidates);

foreach (PendingChange pc in candidates)
{
    if ((pc.ChangeType & ChangeType.Delete) == ChangeType.Delete)
    {
        workspace.PendDelete(pc.LocalItem);
    }
    else if ((pc.ChangeType & ChangeType.Add) == ChangeType.Add)
    {
        workspace.PendAdd(pc.LocalItem);
    }
    else
    {
        workspace.PendEdit(pc.LocalItem);
    }
}

PendingChange[] changes = workspace.GetPendingChanges();

/* Now you can review and CheckIn your changes. */

如果你不能这样做(因为你正在运行旧版本的 TFS 或 Visual Studio,或者出于其他原因),那么你应该只使用TFS 电动工具 http://www.microsoft.com/en-us/download/details.aspx?id=35775并运行tfpt online.

If you 真的真的想要为此使用 TFS API,那么您只需执行以下操作tfpt online命令执行以下操作:

  1. 扫描整个本地工作文件夹映射
  2. Run a QueryItems针对本地工作文件夹映射
  3. 对于本地项目中存在但服务器上不存在的任何文件,挂起添加
  4. 对于服务器项中存在但本地文件系统上不存在的任何文件,挂起删除
  5. 对于任何其他项目,确定它是否可写。如果是这样,请等待编辑。 (注意,您可能希望检查文件的 MD5 哈希值以确定它是否是actually已编辑或刚刚标记为可写。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 TFS API 检测文件删除更改(自动,无需 VS 交互) 的相关文章

  • 显示测试结果 使用 TFS api 形成测试套件

    我正在参与一个学校项目 我将在其中分析公司的缺陷数据库 他们正在使用 Microsoft Foundation Server TFS 我对 TFS 和 TFS api 很陌生 我在使用 TFS 客户端对象模型从 TFS 获取正确数据时遇到一
  • TfsConfigurationServer.GetService() 始终返回 null

    我尝试使用 TFS SDK 连接到 TFS 2010 但无法获取 VersionControlServer 服务 var servers RegisteredTfsConnections GetConfigurationServers ok
  • 以编程方式在 TFS 中添加新迭代

    我可以通过右键单击项目并转到 团队项目设置 gt 区域和迭代 gt 迭代 选项卡 手动将新迭代添加到 TFS 中的团队项目 是否有一个示例说明如何使用他们的 API 以编程方式执行此操作 Thanks 经过基于 taylonr 链接的一些实
  • 使用 TFS API 将代码签入 TFS 服务器

    我正在编写 C 代码来将代码签入 TFS 服务器 Workspace WS VersionControl GetWorkspace TeamProject WS Map TFSMapServerPath LocalWorkingPath i
  • API资源位置未注册

    我可以创建项目 删除 重命名所有内容 但是当需要获取组时 它会显示 API 资源位置 ebbe6af8 0b91 4c13 8cf1 777c14858188 未注册 http khanamar3 8080 tfs DefaultColle
  • TFS SDK:查询昨天的构建

    我可以查询团队项目中的所有构建 如下所示 var bServer teamProjectCollection GetService
  • Shell 扩展:未显示在 Windows 资源管理器上下文中

    我有 Windows 7 Professional x64 我的计算机上安装了 Visual Studio 2010 Premium 和 Visual Studio 2012 Premium 我于 2011 年 12 月安装了 TFS Po
  • Azure Devops - 按代理池 ID 获取发布定义

    我试图使用 NET 客户端库查找配置为使用特定代理池的所有构建和版本 假设agentPoolId 我可以得到所有的构建定义 如下所示 connection is of type VssConnection using var buildCl
  • 在 C# 中克隆 VSTS 构建定义

    我正在使用 BuildHttpClient 的 GetDefinitionAsync 和 CreateDefinitionAsync 来克隆 VSTS 构建定义 这工作正常 但我想在项目的根文件夹之外的不同文件夹中创建构建定义 我可以通过
  • 使用 TFS 2010 API 订阅工作区事件

    我正在尝试编写一些代码来监视本地工作站上的 TFS 工作区 但目前我在触发事件时遇到问题 例如 如果我在工作区中映射一个新文件夹 我想订阅 versionControl UpdatedWorkspace 事件 如果我执行 get 操作 我想
  • TFS:查询包含特定变更集的构建

    我有许多基于 TFS 中的单个分支 例如 Main 执行的构建定义 我想 以某种方式 查询 TFS 以查找包含我提供的特定变更集编号的所有构建 并返回 TFS 包含的构建名称的字符串列表 任何类型的应用程序 VS 扩展 CLI 应用程序 w
  • TFS API dll 的 SpecificVersion=False

    我们的 Web 应用程序大量使用 TFS API 我们使用 TFS 2010 API dll 开发并编译它 我们还设置 SpecificVersion False 问题是 当我们部署到具有 TFS 2012 而不是 TFS 2010 的服务
  • 使用 Powershell 将文件检入 TFS

    作为持续集成构建的一部分 我正在创建一个 SQL 脚本 该 SQL 脚本生成后必须重新签入 TFS 我在 Powershell 中使用 TFS Powertools 我在我的机器上使用的代码是 Add TfsPendingChange Ad
  • TFS:将一个分支中本地完成的更改提交到另一个分支

    我对很多文件进行了更改 同时我想我宁愿将这些未经测试的代码提交到尚未创建的分支 这样现有代码库的用户就不会受到影响 由于我接触了很多很多文件并创建和添加了新的子项目等 我想避免手动复制文件和文件夹 在 Visual Studio 中完成此操
  • 从TFS获取当前迭代路径

    我正在尝试获取团队 TFS 项目的当前迭代路径 我尝试做到这一点的方法是使用博客http blog johnsworkshop net tfs11 api reading the team configuration iterations
  • 适用于 IIS 的 Windows PowerShell 管理单元在 32 位上失败?

    我正在尝试编写一个 PowerShell 脚本来自动执行 IIS 网站部署 我尝试在 Windows Server 2008 R2 计算机上运行脚本 32 位 C Windows SysWOW64 WindowsPowerShell v1
  • VS30063:您无权访问 https://dev.azure.com

    我正在尝试在 asp net core 2 1 mvc 应用程序中使用以下代码连接 Azure DevOps Uri orgUrl new Uri https dev azure com xxxxx String personalAcces
  • 源代码管理无法启动手动合并工具,为什么?

    我曾经执行过tf 合并 Alpha Dev Alpha Main recursive从命令提示符将更改从 Dev 分支合并到 Main 分支 在发生冲突时 它会显示 解决冲突 窗口 我们可以通过选择选项手动解决冲突在合并工具中合并更改 直到
  • 如何使用 REST API 列出 TFS GIT 存储库中的所有文件

    全部 我正在尝试使用 REST API 获取 TFS GIT 中特定存储库中的所有文件的列表 我找到了下面的一个 但它只显示 scopePath buld xml 后面提到的特定文件名的内容 它只显示文件build xml的内容 但我试图仅
  • TFS API - 缓慢的 foreach 变更集迭代

    问题背景 我正在使用 TFS api 查询 TFS 服务器上的大范围 1 600 文件 我从每个文件中收集其所有 ChangesetId 然后将其收集在列表中 代码 这是我正在使用的代码 它可以正确生成 QueryHistory 方法中指定

随机推荐

  • 如何在 Haskell 中对列表进行分区?

    我想获取一个列表 或字符串 并将其拆分为 N 个元素的子列表 我该如何在 Haskell 中做到这一点 Example mysteryFunction 2 abcdefgh ab cd ef gh cabal update cabal in
  • 在 jquery 中启用/禁用下拉框

    我是 jQuery 新手 我想使用复选框启用和禁用下拉列表 这是我的html
  • 从 ruby​​-ncurses 中获取 256 种颜色

    我的终端有 256 种颜色 效果很好 测试脚本在这里 http www frexx de xterm 256 notes 但是当我使用 ncurses 通过 Ruby ncurses 时它停止工作 打印该页面上给出的转义序列工作正常 但是当
  • 这句话有什么道理呢? (Sun 对 Java 变量的命名约定)

    这几天我一直在引用Sun的文档中的这段话 直到现在我才停下来思考它在说什么 但我却无法理解它的意义 请记住 英语不是我的母语 命名约定 http java sun com docs codeconv html CodeConventions
  • Objective C 中需要指针对象

    一个非常基本的问题 但理解这些概念确实非常重要 在 C 或 C 语言中 我们通常不使用指针变量来存储值 即值简单地存储为 int a 10 但在 ios sdk 中 在 Objective C 中 我们使用的大多数对象都是通过用它们表示指针
  • 将 Laravel 事件订阅者排队

    我通过事件订阅者处理多个事件 而不是创建单独的事件 侦听器 我想对其中几个事件进行排队 但我还没有找到实现这一目标的方法 我已经关注官方了文档 https laravel com docs 5 2 events event subscrib
  • 如何获取适用于 Xcode 3.2 的 iPhone SDK 2.2.1?

    在我升级到 Snow Leopard 和 Xcode 3 2 后 我真的很后悔 Xcode 丢失了所有的 SDK 我是那些仍然想开发 2 2 1 的老式白痴之一 但苹果不向我提供旧的 SDK 下载 现在我很聪明 做了很多时间机器备份 但是
  • 在 .NET 中检测 3G 互联网连接

    我们的应用程序使用 RSS 从互联网下载数据 但在连接 3G 的计算机上出现连接问题 我们想要检测 3G EDGE GPRS 连接 以便我们可以更改应用程序行为 显示警告或连接状态 这将如何完成 The NetworkInterface h
  • Linkedin Ads API “dateRange”请求参数的格式是什么?

    dateRange 的正确格式是什么rest liv2 文档中当前的示例不支持它 我不明白rest li文档 确切地说 它的格式是什么 这是我提出的要求 Headers X Restli Protocol Version 2 0 0 Aut
  • 如何在 IntelliJ 中使用拖放来实现 java swing

    我正在使用 IntelliJ 使用 swing 进行 java 应用程序开发 使用布局管理器管理内容很困难 那么 是否有任何工具可以像 Visual Studio for vb net 一样提供拖放功能 您可以使用 IntelliJ GUI
  • 本地化 Laravel

    我一直在尝试更新网站的语言 控制器 public function getUpdateLanguage Request request request data request gt all Session put locale reque
  • 如何获取当前类的类型?

    这有点难以解释 但我到处都找过了 但找不到任何好的答案 我还看到了 Stack Overflow 的问题如何引用 Java 中接口实现的类类型 https stackoverflow com questions 8161712 how ca
  • #include 在 main() 函数中

    我想知道里面是否有可能main 来自 C 的函数来包含一些东西 例如 在 Cell 程序中 我定义了 cache api h 的参数 稍后将在main 我想改变的功能 我明白什么是定义的 define可以是未定义的 undef程序中的任何位
  • OmniAuth::NoSessionError - 您必须提供会话才能使用 OmniAuth。 (在设备中配置)

    您好 我正在学习如何使用omniauth 作为 ember 应用程序的后端 当我运行我的应用程序时 我收到下面提到的错误 OmniAuth NoSessionError 您必须提供会话才能使用 OmniAuth 在救援轨道上 我的应用程序在
  • 如何使这个 JS 函数异步?

    function takesTime for var i 0 i
  • AVFoundation 根据预览宽高比裁剪捕获的静态图像

    我的问题与这个问题大多相似 裁剪 AVCaptureSession 捕获的图像 https stackoverflow com questions 5780580 cropping image captured by avcapturese
  • 我如何将 pack uri 资源与媒体播放器一起使用?

    我有一些非常简单的代码 只需要播放指定音量的声音 如下所示 var mp new MediaPlayer mp Open uri mp Volume volume mp Play 出现问题是因为这是 Prism 模块的一部分 我不知道执行程
  • spring security的配置问题

    我有 Spring Security 应用程序 以下是我的 security context xml
  • 列表理解中的“with”关键字? [复制]

    这个问题在这里已经有答案了 我遇到了这种用于读取文件中的行的语法 with open as f for line in f
  • 使用 TFS API 检测文件删除更改(自动,无需 VS 交互)

    我在 tfs 工作区中有一个本地文件夹并使用 TFS API 每天晚上我都会删除这个文件夹 然后将数据库脚本编写为 sql 文件 如果现在添加或编辑了某些内容 则会找到更改并进入待处理的更改以进行签入 问题是我如何使用 TFS API 检测