我在tfs工作区中有一个本地文件夹,并使用TFS-API。
每晚我都会删除此文件夹,并在该脚本之后将数据库删除为.sql文件。 如果现在添加或编辑了某些内容,则会找到更改并进入挂起的更改以进行签入。
问题是我如何使用TFS-API检测到文件丢失(故意,因为不再在数据库中,因为不再编写脚本)。 第一步很明显,删除空文件夹中的所有文件和脚本。
我在开头使用workspace.PendEdit,这使我能够覆盖外部文件。 完成数据库脚本编写后,我将执行workspace.PendEdit和workspace.PendAdd。
这可以按预期工作。但workspace.PendDelete找不到已删除的文件,因此无法将已删除的文章添加到待处理的更改中。
tfs的电动工具有一个值得称道的工具,它有一个在线标志,应该这样做,我想要的。
我的问题:我可以做什么,我用tfs-api描述了什么? 如果这不起作用,有任何人在这个在线旗帜下有效吗?
我在本地文件夹中有两个文件:1.sql和2.sql 最初检查这两个文件。
我删除2.sql本地(不知道tfs) 我添加一个文件:3.sql 我编辑1. sql
现在,我使用workspace.PendEdit和工作空间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);
和workspace.PendEdit(localPath, RecursionType.Full);
,它就像一个sharm,所以新的.sql文件将被添加和编辑(真正改变的脚本)为&# 34;转换签"
//此时我认为workspace.PendDelete(new [] { localPath }, RecurstionType.Fulll);
也是这样:看到文件在本地丢失,然后将这些文件挂起以便在服务器上删除。但这不会发生。没有添加待处理的更改。
var pendingChanges = workspace.GetPendingChanges(localPath, RecursionType.Full);
workspace.CheckIn(pendingChanges, "Per TFS-API, " + DateTime.Now.ToString());
答案 0 :(得分:4)
您真正想要做的是使用本地工作区,让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 Power Tools并运行{{1 }}
如果真的,想要使用TFS API,那么您只需执行tfpt online
命令所做的事情:
tfpt online