【问题标题】:Can I unshelve to a different branch in tfs 2008?我可以在 tfs 2008 中取消搁置到不同的分支吗?
【发布时间】:2008-09-22 20:19:25
【问题描述】:

假设我团队中的某个开发人员搁置了他在分支 A 中所做的更改。而我正在处理分支 B。我可以将他的更改搁置到分支 B 中吗? (通过 GUI 或命令提示符)

【问题讨论】:

标签: tfs branch shelve unshelve


【解决方案1】:

Visual Studio Power Tools 应该让你这样做。

C:\src\2\Merlin\Main>tfpt unshelve /?
tfpt unshelve - Unshelve into workspace with pending changes

Allows a shelveset to be unshelved into a workspace with pending changes.
Merges content between local and shelved changes. Allows migration of shelved
changes from one branch into another by rewriting server paths.

Usage: tfpt unshelve [shelvesetname[;username]] [/nobackup]
                     [/migrate /source:serverpath /target:serverpath]

 shelvesetname          The name of the shelveset to unshelve
 /nobackup              Skip the creation of a backup shelveset
 /migrate               Rewrite the server paths of the shelved items
                        (for example to unshelve into another branch)
 /source:serverpath     Source location for path rewrite (supply with /migrate)
 /target:serverpath     Target location for path rewrite (supply with /migrate)
 /nobackup              Skip the creation of a backup shelveset

例如,要将在 Branch1 上创建的名为“Shelve Set Name”的搁置集合并到 Branch2,请使用以下命令:

>tfpt unshelve "Shelve Set Name";domain\userName /migrate /source:"$/Project/Branch1/" /target:"$/Project/Branch2/"

【讨论】:

  • Ooohhh... Curt,我想你让我很开心。我将不得不稍后尝试。
  • 电动工具从哪里来的?
  • 是的,电动工具应该让你这样做,但不幸的是,每次合并都会出错,所以它几乎没用。
  • 合并还不错。我发现自动合并在 90% 的情况下都有效。
  • 刚试过。我在书架集中移动了许多文件,不幸的是这似乎效果不佳。您需要手动“迁移”所有这些文件(也没有多选)。然后将它们作为新文件添加到工作区。我不能使用它,因为我不能再合并它了。
【解决方案2】:

避免手动合并每个文件的 tfpt 替代解决方案

tfs 电动工具的问题在于you're doing a 'baseless merge' so have to confirm every file。我有超过 800 个文件的搁置集,我从不相信“自动合并”按钮,也不想依次浏览每个文件 - 所以我必须找到另一种方法!

  • 下载并安装TFS Shelveset Sidekick
  • 该工具出现在 VS2010 中的“工具”下
  • 运行“Shelveset Sidekick”工具,点击搜索以显示搁置集
  • 右键单击您的搁置集并选择“导出搁置集”
  • 保存到空位置,例如C:\temp\shelveset-name
  • 现在有了一个包含新文件的完整目录结构

(注意:导出时没有进度条 - 因此,如果您有一个需要很长时间才能导出的大型搁置集,您只需在 Windows 资源管理器(文件>属性>大小)中检查文件是否仍然存在如果您认为它已冻结,请关闭)。

您现在只需使用 Windows 资源管理器将它们复制到新分支。

这对我有用:

  • 首先检查整个解决方案(在新分支中)
  • 关闭该解决方案
  • 在 VS (Tool to do this) 中使 TFS 脱机 - 请参阅下文了解为什么这很重要...
  • 在 Windows 资源管理器中复制文件。 c:\temp\shelveset-name 中的目录结构必须重命名以对应新分支。 提示:确保复制到正确的位置!!!
  • 让 VS 上线
  • 它应该找到所有更改并添加新文件
  • 如果它要求您绑定源控制,请务必验证新分支的路径是否正确。
  • 测试 - 然后签入新文件

重要提示:我发现,如果您不先使 TFS 脱机,那么您最终会看到任何新文件(来自您的 unshelves 变更集)显示没有一点红色复选标记,您必须排除和再次包括它们以使它们添加。如果有人对此问题有其他解决方案,我很想知道 - 刷新似乎不起作用。

【讨论】:

  • 这种方法对于较大的书架更容易,是我遵循的方法。谢谢!
  • 这种方法对于更大的书架确实更好
  • 好吧,您可以在不使 TFS 脱机的情况下逃脱。但我不确定这是否值得。我所做的是在源代码管理资源管理器中从相关文件夹上打开的上下文菜单中运行比较操作。可以过滤输出以仅显示不同的项目。然后它允许对它们进行多项选择并一次检查所有这些。但我想让 TFS 脱机比这更快更简单。
  • 不幸的是,当我在搁置集中“添加”更改时,这对我不起作用。我收到一条错误消息“无法检索搁置的文件。需要对文件进行搁置的挂起更改”。
  • @JohnSaunders 您的意思是带有 any 添加或专门添加的搁置集?多年来我不需要这样做:)
【解决方案3】:

货架信息包括它去往的具体路径。不幸的是,除了搁置到的位置之外,我不知道有任何自动方式可以将其搁置到任何位置。有时我想这样做,我不得不检查新分支中的等效文件,从旧分支中取消搁置,然后手动复制文件。

编辑:嗯,我想我做得很艰难。我将不得不尝试 Curt 的解决方案。 :)

【讨论】:

    【解决方案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分支根文件夹运行命令
    • 验证特定 VS 的 Team Explorer Server 连接
    • TF Power Tools 2013 适用于 TFS v15,至少 migrate 选项有效

    【讨论】:

      【解决方案5】:

      以下步骤可用于小尺寸搁置集(约 20 个文件或更少)。

      1. 在搁置集和目标分支上,首先签入或回滚所有待处理的更新。
      2. 在搁置集分支上,从适用的搁置集中取消搁置文件。
      3. 在目标分支上,检出未搁置的搁置集中的任何现有文件。
      4. 将搁置分支上的未搁置文件与目标分支上的文件进行比较,以确定需要合并更新的文件(如果有)。
      5. 如果需要,手动对上一步的适用文件进行合并更新,并将这些文件保存在目标分支工作区中。
      6. 将其他搁置文件从搁置分支工作区复制到目标分支工作区。
      7. 将目标分支工作区中新更新的文件与签入的文件进行比较。根据需要进行任何更正。
      8. 签入目标分支上的新更新文件。
      9. 回滚搁置分支上未搁置的文件。

      【讨论】:

        猜你喜欢
        • 2018-01-08
        • 2017-01-09
        • 2013-04-24
        • 1970-01-01
        • 1970-01-01
        • 2010-10-12
        • 2023-02-08
        • 2011-11-07
        • 1970-01-01
        相关资源
        最近更新 更多