TFS 搁置集从一个分支迁移到另一个分支

Posted

技术标签:

【中文标题】TFS 搁置集从一个分支迁移到另一个分支【英文标题】:TFS shelveset migration from one branch to another 【发布时间】:2011-11-07 10:54:41 【问题描述】:

我必须将在一个分支中创建的搁置集“开发”迁移到另一个分支“发布”。 这样我就可以直接合并搁置集,然后发布为开发分支创建的版本。

我使用的命令是:

tfpt unshelve "shelveset name" /migrate /source:"$...development" /target:"$...Release"

它显示这个错误:

无法确定工作区

【问题讨论】:

对我来说是我安装了两个 Powertools 版本。我不得不卸载旧的,所以只剩下最新的(2012)。此外,powertools 版本不引用 TFS 版本(因为我们使用的是 2010) 【参考方案1】:

您启动命令的位置必须在您的工作区中。 例如。 c:\workspaces\project\development 如果这是您的源所在的位置。

【讨论】:

【参考方案2】:

我猜你的问题是:如何在不发生此错误的情况下完成工作?。 在这种情况下,请确保两个分支都映射到您的本地系统,并且您的源代码的最新版本执行了 get-latest-version。

这应该可以防止错误发生,因为路径都包含有关用于映射的工作空间的信息。

【讨论】:

【参考方案3】:

我今天遇到了同样的问题。 在检查了以下项目后,我得到了它的工作:

只安装了一个 Powertools。 从开发人员命令提示符运行命令 从映射到目标工作空间的文件夹中运行命令。

我不得不卸载 v. 2010,所以只剩下 v. 2012。版本号似乎没有引用您的 TFS 版本。 要检查您是否在正确的文件夹中,您可以运行 tf workspace。 在弹出的窗口中,找到您要定位的工作空间并检查列本地文件夹。确保您在该文件夹中。

【讨论】:

我同意。我已经阅读了很多关于此的帖子并尝试了各种修复,但我确信是多个现有版本的 TFPT 甚至存在于您的系统上(无论您如何引用它们)导致此错误发生,因此我强烈怀疑这是 Power Tools 代码中的错误。【参考方案4】:

我花了很多时间来完成这件事,我几乎没有什么问题需要克服,其中一个实际上是

无法确定工作区

通过从 source 分支根文件夹运行命令解决了这个特定问题。这与这里的一些答案以及他们说使用“目标”分支的一般情况下的一些答案相反 - 不,使用“源”:

cd [your !!source!! branch root]
tfpt unshelve /migrate /source:"$/MyCollection/Development/Maint1.1" /target:"$/MyCollection/Development/Maint1.2" "myShelveset;UserName"

在此之后出现了第二个问题。似乎它无法连接到 TFS 服务器。我意识到,我安装了多个 VS 并连接到不同的 TFS 服务器。我使用的是 VS12,我有工作区和服务器连接。但是我没有意识到需要在 VS13 中复制相同的连接才能使 TFPT2013 正常工作。它连接到相同的服务器和工作区。

我也尝试过使用 TFPT2015,但我安装了它,但它没有安装 TFPT.exe,因此它没用。所以我尝试了从 TFPT2013 到 TFS2015,它适用于这个特定的命令。我想知道,如果 VS12/13 在 TFS2015 上运行良好,为什么不呢?

总结

使用 CMD 或 DevCMD - 没关系 从source分支根文件夹运行 验证团队资源管理器服务器连接 TF Power Tools 2013 适用于 TFS v15,至少 migrate 选项有效

【讨论】:

我从源分支运行相同的命令,但仍然得到错误。我正在使用 TFPT 2015,服务器上有 TFS 2017 - 这可能是问题吗? @ryanwebjackson 确保您的两个分支都映射到工作区 @ryanwebjackson 我想是的。基本上,TFS 不能处理未映射的代码。我这样理解 - "unable to determine the workspace" 告诉你它找不到这个 "$/collection/..." 映射到某个目录一些工作空间。你想映射两个分支,获取最新的,然后运行你的命令 我想我只是无法运行该命令,因为我的一个工作区在目录结构中太高了,但我不会删除它,只是为了这个动作。不过感谢您的反馈,我真的很感激。 @ryanwebjackson 这是我没有得到的地方......“我的一个工作区在目录结构中太高了”。工作空间不能高或低。您可以在一个工作区中映射尽可能多的分支或其部分。即使您谈论分支 - 这也无关紧要。可以是$/xxx/x/x/x/x/x 和另一个$/y/y【参考方案5】:

我的第一个答案解释了如何使用TFPT 正确完成此操作。在这个答案中,我想解释如何在没有 TFPT 的情况下做到这一点。

每个开发人员都应该有多个工作区。因为我们同时处理多个问题,我们不想混淆。所以,你在WS1 处理一个问题,在WS2 处理另一个问题。因此,如果您在不同的工作空间中搁置您的搁置集,这也将这样做。因为您的搁置集不能指向同一工作区中的 2 个不同位置。但在不同的工作空间中,它会取消搁置到该工作空间中映射的位置。

【讨论】:

【参考方案6】:

我遇到了与 Boris Callens 相同的问题。我已经为 VS2012 和 VS2013 安装了 TF Power Tools。在命令提示符中运行 tfpt.exe 命令时,我总是收到错误消息“无法确定工作区”。这是因为我将 VS 2012 电动工具与 TFS 2013 一起使用。所以我必须在系统环境变量“TFSPowerToolDir”中更改电动工具的路径以指向 VS2013 的电动工具。

可以找到运行的版本号:tfpt.exe /? TF Power Tools version

【讨论】:

以上是关于TFS 搁置集从一个分支迁移到另一个分支的主要内容,如果未能解决你的问题,请参考以下文章

是否有一种简单的方法可以在一个分支中创建补丁,然后将其应用于 TFS 2010 中的另一个分支?

取消搁置到另一个分支

代码审查工作流程+ TFS中的功能分支

Git 的工作流程

Git-Tfs 在分支上缺少历史记录

TFS 2010:主分支的门控签到;在开发分支上滚动构建?