105

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

4

5 回答 5

129

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/"
于 2008-09-22T20:24:11.157 回答
34

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

tfs 电动工具的问题在于您正在进行“毫无根据的合并”,因此必须确认每个文件。我有超过 800 个文件的搁置集,我从不相信“自动合并”按钮,也不想依次浏览每个文件 - 所以我必须找到另一种方法!

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

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

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

这对我有用:

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

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

于 2011-03-25T05:22:05.497 回答
1

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

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

于 2008-09-22T20:23:00.957 回答
0

我花了很多时间来完成这件事,我几乎没有什么问题需要克服。这是可能的,但这里很少有问题和很少遵循的规则来避免这些问题

错误:

无法确定工作区

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

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 - 没关系
  • 从源分支根文件夹运行命令
  • 验证特定 VS 的 Team Explorer Server 连接
  • TF Power Tools 2013 适用于 TFS v15,至少迁移选项有效
于 2018-05-09T19:07:36.097 回答
0

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

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