.net 解决方案以获取与 TFS 中的变更集关联的文件
.net solution to get files associated with changesets in TFS
我有一个 .net 解决方案,可以将一组变更集放入配置文件 [values.xml] 中指定的 TFS 本地工作区。一旦与变更集关联的文件下载到与工作区关联的本地工作文件夹,我就有了一个单独的打包脚本,可以从这些文件中创建一个 msi。 .net 解决方案工作正常,但通常。问题出现在以下条件下:
假设我有一个变更集:C717171,它与我对 web.config 文件所做的更改相关联。
配置文件 [values.xml] 在其中列出了这个变更集,这意味着 .net 解决方案必须将这个特定的变更集放入 TFS 本地工作区,之后一个单独的打包脚本将接管。
实际情况是,.net 解决方案将存储库中的所有 web.config 文件与所需文件放在一起。
var changesets = vcs.QueryHistory(repository, VersionSpec.Latest, 0, RecursionType.Full, null, versionFrom, versionTo, Int32.MaxValue, true, false).Cast<Changeset>();
Workspace myworkspace = vcs.CreateWorkspace(workspaceName, tfsUser);
var workingFolder = new WorkingFolder(repository, workspacePath);
// create WorkingFolder and mapping
myworkspace.CreateMapping(workingFolder);
foreach (Changeset changeset in changesets.OrderBy(c => c.ChangesetId))
{
var version = new ChangesetVersionSpec(changeset.ChangesetId);
foreach (Change change in changeset.Changes)
{
myworkspace.Get(new[] { change.Item.ServerItem }, version, RecursionType.Full, GetOptions.Overwrite);
}
}
如果需要,我可以提供更多详细信息。
如果要获取单个文件,需要使用RecursionType.None
,而不是RecursionType.Full
。
当您在文件路径上使用 RecursionType.Full
时,您指定要在指定文件夹中使用该名称的文件, 和 任何文件在子文件夹中具有相同的名称。
因此,如果您指定 $/Project/file.txt
,它将下载 $/Project/file.txt
以及 $/Project/subdir1/file.txt
、$/Project/subdir2/file.txt
等
指定RecursionType.None
以完全匹配给定路径。
我有一个 .net 解决方案,可以将一组变更集放入配置文件 [values.xml] 中指定的 TFS 本地工作区。一旦与变更集关联的文件下载到与工作区关联的本地工作文件夹,我就有了一个单独的打包脚本,可以从这些文件中创建一个 msi。 .net 解决方案工作正常,但通常。问题出现在以下条件下:
假设我有一个变更集:C717171,它与我对 web.config 文件所做的更改相关联。 配置文件 [values.xml] 在其中列出了这个变更集,这意味着 .net 解决方案必须将这个特定的变更集放入 TFS 本地工作区,之后一个单独的打包脚本将接管。
实际情况是,.net 解决方案将存储库中的所有 web.config 文件与所需文件放在一起。
var changesets = vcs.QueryHistory(repository, VersionSpec.Latest, 0, RecursionType.Full, null, versionFrom, versionTo, Int32.MaxValue, true, false).Cast<Changeset>();
Workspace myworkspace = vcs.CreateWorkspace(workspaceName, tfsUser);
var workingFolder = new WorkingFolder(repository, workspacePath);
// create WorkingFolder and mapping
myworkspace.CreateMapping(workingFolder);
foreach (Changeset changeset in changesets.OrderBy(c => c.ChangesetId))
{
var version = new ChangesetVersionSpec(changeset.ChangesetId);
foreach (Change change in changeset.Changes)
{
myworkspace.Get(new[] { change.Item.ServerItem }, version, RecursionType.Full, GetOptions.Overwrite);
}
}
如果需要,我可以提供更多详细信息。
如果要获取单个文件,需要使用RecursionType.None
,而不是RecursionType.Full
。
当您在文件路径上使用 RecursionType.Full
时,您指定要在指定文件夹中使用该名称的文件, 和 任何文件在子文件夹中具有相同的名称。
因此,如果您指定 $/Project/file.txt
,它将下载 $/Project/file.txt
以及 $/Project/subdir1/file.txt
、$/Project/subdir2/file.txt
等
指定RecursionType.None
以完全匹配给定路径。