【问题标题】:Visual Studio 2017 Cannot Move Shelveset to Another BranchVisual Studio 2017 无法将搁置集移动到另一个分支
【发布时间】:2023-03-24 21:20:01
【问题描述】:

由于他们据称已将大部分 Power Tools 功能集成到 VS2017 中,因此新命令“tf unshelve”与将搁置集移动到另一个分支的旧命令“tfpt unshelve”不同,因为您无法添加源以及使用新命令的目标。我真的不想为了移动搁板而必须在我的笔记本电脑上安装 VS2015。有谁知道如何用 VS2017 做到这一点?我很难相信这是不可能的。

非常感谢任何帮助!

【问题讨论】:

标签: visual-studio-2017 tfvc


【解决方案1】:

我绝对同意这是 2017 年及以后的一个非常错过的​​功能。在手动执行太多次之后,我决定将其添加到我的(免费)Visual Studio 扩展中,称为“MultiMerge”。您现在可以右键单击搁置集并选择您的目标分支。有一个VS2017 版本和VS2019。或者您可以使用 Visual Studio 中的工具和扩展菜单简单地选择此扩展。

随意评价扩展,让其他人更快地找到它:)

【讨论】:

  • 我试过这个并得到:“$/branch/shelveset/is/in/and/first/shevled/file/path 没有工作文件夹映射”我有多个活动工作区这个分支.在加载源工作区项目的情况下使用 VS2017 中的“Unshelve to branch”。
  • 对不起,伙计,听起来你的书架很复杂。该插件将尝试找出要使用的工作区,并使用与搁置集中的第一个文件匹配的第一个工作区。它不会检查您整个搁置集中的所有文件是否都已映射。如果您可以传递我应该使用的代码,唯一的起点是 PendingsChange 列表(在命名空间 Microsoft.VersionControl.TeamFoundation.Client 中),我全都听好了。我能提供的唯一解决方法是:限制您的 WorkSpaces。我总是(15 年以上)使用一个单一的,它映射了所有的东西(巨大的源库),它就像一个魅力。
  • 看起来重命名被翻译成只是添加...
  • @Dutchman 又是一个赞成票,感谢您的支持 - 在 VS2019 中使用您的扩展对我来说非常有用,可以将其搁置到不同的分支。
  • @Dutchman 非常感谢 VS 22 的发布。
【解决方案2】:

另一种解决方法...

  1. 签入现有搁置集的更改(更改集 1)
  2. 将更改合并到另一个分支并签入(变更集 2)
  3. 回滚变更集 1 中的更改。

这会保留变更集 2 的更改并回滚原始分支。

此流程可能不适用于每家公司及其政策,但确实有效。我不喜欢它,但有时它是必要的。

【讨论】:

  • 我对此表示赞同。我不喜欢它,但在其他事情上花了几个小时之后,这确实是唯一有效并节省时间的事情。我想说,根据您团队的速度,您可能希望签入您的更改(变更集 a),并立即回滚(变更集 b)在旧分支中创建背靠背的变更集。然后只需将变更集 a 合并到您的新分支中并使用它。您现在有时间在本地调试它,测试构建和其他东西,而无需在任何人尝试在旧分支上错误地使用变更集 a 之前快速完成它。
  • 如此简单。谢谢。
【解决方案3】:

不幸的是,使用命令“tftp unshelve”或“tf unshelve”将 Shelveset 移动到另一个分支在 VS 2017 中目前仍不受支持。

已经有一个 feedback submitted here 来跟踪它,就像下面提到的 Youhana Naseim [MSFT](来源 here):

对于 VS 2017,我们没有电动工具版本。我们不断 评估产品中仍然缺少的功能。这 三个最值得注意的是:

  • TFS Windows Shell 扩展集成

  • 按状态查找服务器工作区

  • 取消搁置/迁移

因此,作为一种解决方法,您可以尝试以下方法:

【讨论】:

  • @Rani Radcliff 你解决了这个问题吗?有更新吗?
  • 我也有同样的问题,但不明白tf rename 有什么帮助。能否提供更详细的示例?
  • 您好,我只想提一下,安装 2015 Power Tools 不是解决方案 - 如果机器上没有 Visual Studio 2015,它不会安装 tftp Exe! (我认为)
  • 现在有一个请求可以在新的开发者社区网站developercommunity.visualstudio.com/content/problem/342203/…进行投票
  • @JonoB - 或者您可以对 DevComm 上已经打开的问题进行投票。 (这个答案的第一个超链接)
【解决方案4】:

使用 VS2019 的另一种可能更简单的方法是将源文件夹复制/粘贴到分支目标文件夹并使用

tf reconcile /promote

检测所有添加或更改的文件。

【讨论】:

    【解决方案5】:

    当我知道分支文件可以被货架集直接覆盖时,我会这样做。如果您需要合并,请使用带有目录比较的 win-merge 将内容重新组合在一起。

    • 关闭 Visual Studio 的所有实例
    • 将本地源目录重命名为临时名称
    • 打开 Visual Studio
    • 正常取消搁置您的更改 - VS 将重新创建仅包含您的更改的目录结构。
    • 将所有更改的文件复制到分支目录(覆盖只读文件)
    • 关闭视觉工作室
    • 将本地源目录重命名回原来的名称(去掉重新创建的 VS)
    • 重新打开您的分支项目
    • 现在有两种选择:您可以先离线,然后再重新在线,让 VS 弄清楚发生了什么变化,或者只需检查整个文件夹,然后再次检查。请确保在执行此操作之前没有检查任何其他内容!

    遗憾的是,这还没有作为原生功能加入 VS,但是当您考虑到取消搁置到代码合并和保留历史记录等的复杂性时,任务就变得复杂了。祝你好运!

    【讨论】:

    • 这对我不起作用 (VS2019),当我尝试取消搁置我的更改时,我收到一条错误消息,指出“$/.... 不存在适当的映射”
    【解决方案6】:

    Multimerge 扩展(MultiMerge.2017MultiMerge.2019)对我来说就像一个魅力。 (或者更确切地说,TFVC 工具本身无法通过重新应用补丁来合并。)

    对于 VS 2017 和 VS 2019,没有 tfptunshelve /migrate 命令也没有被合并到 tf 中。因此,目前还没有任何开箱即用的方法。 (最后检查于 v16.7.5)

    【讨论】:

    • 讽刺:多年前,我为 TFS 2005 回答了同样的问题:没有办法开箱即用。然后他们添加了tfpt unshelve /migrate 命令,答案被严重否决以至于我删除了它。几年后我回到了 TFS,我在最新版本中看到了同样的问题。好工作! (我想我需要重新学习 git-tfs 才能保持理智。)
    【解决方案7】:

    到目前为止(2020 年 2 月)TSPT 在 Visual Studio 中不可用。

    我找到的解决方法是创建一个新分支并使用 WinMerge (http://winmerge.org) 之类的工具来比较和合并从 Main 到新分支的更改,然后在一切正常时撤消主分支上的更改。

    【讨论】:

      【解决方案8】:

      在这个问题上迟到了,但我通过在分支 A 中获取我需要的变更集来解决它。将文件夹重命名为分支 B。现在我的新分支有了我需要的变更集。然后只需在高级下强制获取最新以重新获取原始分支 A 原样。我的分支 B 是全新的,所以我不需要它的任何其他东西,不确定你的情况是否相同,但解决起来足够快。

      【讨论】:

        猜你喜欢
        • 2011-11-07
        • 2013-04-24
        • 2014-02-22
        • 1970-01-01
        • 2011-05-06
        • 1970-01-01
        • 2020-06-03
        • 1970-01-01
        相关资源
        最近更新 更多