Version control 合并在Team Foundation Server无基础合并中删除
我有两个TFS分支,它们在TFS中没有直接的父/子关系。在某个修订版中,94在我的示例中,删除了几个条目。我的任务是将这些删除应用到主分支。我想通过一个毫无根据的合并来实现。我尝试了以下命令来执行此操作:Version control 合并在Team Foundation Server无基础合并中删除,version-control,tfs,merge,Version Control,Tfs,Merge,我有两个TFS分支,它们在TFS中没有直接的父/子关系。在某个修订版中,94在我的示例中,删除了几个条目。我的任务是将这些删除应用到主分支。我想通过一个毫无根据的合并来实现。我尝试了以下命令来执行此操作: tf merge /baseless /recursive /version:94 .\programs\program1 ..\Release\programs\program1 树中的大多数项目被标记为“合并”,有些项目被标记为“合并编辑”。但是,没有在目标位置删除任何项目。一时兴起,我
tf merge /baseless /recursive /version:94 .\programs\program1 ..\Release\programs\program1
树中的大多数项目被标记为“合并”,有些项目被标记为“合并编辑”。但是,没有在目标位置删除任何项目。一时兴起,我尝试通过一次删除进行合并,如下所示:
tf merge /baseless /recursive /version:94 .\programs\program1\source1.cs ..\Release\programs\program1\source1.cs
我收到以下错误消息:
The item [TFS_PATH] does not exist at the specified version.
我该怎么做?有没有办法避免自己进行所有这些删除?这意味着您必须自己解决一次合并冲突。(注意:我还没有试过这个。)
编辑:另请参见。不,抱歉,无法完成。Baseless merge非常愚蠢,相当于“将文件夹的内容复制到其他地方”。顾名思义,Baseless没有用于区分的历史信息。实际上,这意味着文件内容会传播,但不会更改名称空间(删除、取消删除、重命名)。通过匹配相似的文件名并交叉手指,可以在某种程度上区分文件内容,但是区分名称空间确实需要知道上次同步分支时的树结构是什么样子,所以TFS甚至不需要麻烦 这就是说,如果您知道变更集,即进行所需删除的地方,那么自己编写删除脚本就没什么大不了的了
$tfs = Get-TfsServer -path . -all
$deletes = get-tfschangeset 94 | % { $_.changes } | ? { ($_.changetype -band $tfs.VCS_ChangeType::delete) -ne 0 } | % { $_.serveritem }
($deletes -replace "$/branch1" "$/branch2") | Add-TfsPendingChange -delete
[未经测试,但应能工作]我做了一些试验,以下是我的上述版本。似乎对我有用:
get-tfsChangeset xx |% {$_.changes} |? {($_.changetype -band $tfs.VCS_ChangeType::delete) -ne 0 } |% {$_.item.serverItem -replace "\$/branch1","$/branch2"} | Add-TfsPendingChange -delete
为了使其更加有用,可以对变更集编号和分支路径进行参数化,以便进行更方便的处理
例如,要处理给定分支中的所有删除,请从源位置运行以下命令:
$sourcePath="\$/MySourcePath"
$destPath="$/MydestPath"
Get-TfsItemHistory ./*.sql -r -IncludeItems | %{$_.changes} |
? {($_.changetype -band $tfs.VCS_ChangeType::delete) -ne 0 } |
% {$_.item.serverItem -replace $sourcePath,$destPath} | Add-TfsPendingChange -delete
您在replace命令(或子句或其任何调用)中忘记了逗号。我还在调试它。谢谢,当你让它工作的时候,请随意编辑我的帖子。理查德,我没有这个名声。不过我正在努力。