我可以在tfs 2008中放弃其他分支吗?


Answers:


129

Visual Studio的电动工具应该让你这样做。

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/"

2
噢...柯尔特,我想你刚刚度过了我的一天。我将不得不稍后再尝试。
爱马仕(Herms)

您从哪里获得电动工具?
盖伊

3
是的,电动工具应该允许您执行此操作,但是不幸的是,每次合并都会出错,因此几乎是无用的。
蒂姆·布克

合并还不错。我发现自动合并在90%的情况下都有效。
贾斯汀·路德

2
刚刚尝试过。我在架子上移动了许多文件,不幸的是,这看起来不太好。您需要手动“迁移”所有这些文件(也没有多选)。然后将它们作为新文件添加到工作区。我无法使用它,因为我无法再合并它。
Stefan Steinegger,2010年

34

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

tfs电动工具的问题在于您正在执行“无基础合并”,因此必须确认每个文件。我的书架上有800多个文件,我从不相信“自动合并”按钮,也不想依次浏览每个文件-因此,我不得不另辟!径!

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

(注意:导出时没有进度条-因此,如果您有一个大型架子集,且导出需要很长时间,则只需在Windows资源管理器(“文件”>“属性”>“大小”)中检查文件是否仍在关闭状态认为它是冻结的)。

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

这为我工作:

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

重要提示:我发现,如果您不首先使TFS脱机,那么您将最终获得任何新文件(来自未更改的变更集),并且没有出现红色的复选标记,因此您必须再次排除并包括它们让他们添加。如果有人想解决这个问题,我想知道-刷新似乎无效。


对于较大的货架,此方法比较容易,这也是我遵循的方法。谢谢!
阿妮2012年

这个方法真是再好不过了更大的搁置集
阿米尔

好吧,您可以在不使TFS脱机的情况下脱身。但是我不确定是否值得。我所做的是从相关文件夹上打开的上下文菜单中的“源代码管理资源管理器”中运行“比较”操作。可以过滤输出以仅显示不同的项目。然后,可以对它们进行多项选择,并一次性签出所有这些。但是我想使TFS脱机比这更快,更简单。
标记

不幸的是,当我在架子集中进行“添加”更改时,这对我不起作用。我收到错误消息“无法检索搁置的文件。需要对文件进行搁置的挂起更改”。
约翰·桑德斯

@JohnSaunders您的意思是带有任何添加项或专有添加项的架子集?多年来,我不需要这样做:)
Simon_Weaver 2015年

1

货架信息包括其要到达的特定路径。不幸的是,我不知道有什么自动方法可以将其搁置到除搁置的位置之外的任何位置。我想执行此操作的时间是,我必须在新分支中检出等效文件,从旧分支中删除这些文件,然后手动复制文件。

编辑:好吧,我想我正在努力做。我将不得不尝试Curt的解决方案。:)


0

我花了很多时间来完成这项工作,而且我几乎没有要解决的问题。可能,但是这里很少出现问题,很少遵循规则来避免这些问题

错误:

无法确定工作区

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

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服务器连接
  • TF Power Tools 2013针对TFS v15起作用,至少迁移选项起作用

0

以下步骤可用于小型架子集(约20个文件或更少)。

  1. 在架子和目标分支上,首先将所有待处理的更新签入或回滚。
  2. 在架子集分支上,从适用的架子集上搁置文件。
  3. 在目标分支上,签出未搁置的架子集中的任何现有文件。
  4. 将shelfset分支上的未搁置文件与目标分支上的未搁置文件进行比较,以标识需要合并更新(如果有)的那些文件。
  5. 如果需要,请手动对上一步的适用文件进行合并更新,然后将这些文件保存在目标分支工作区中。
  6. 将其他架子集文件从架子集分支工作空间复制到目标分支工作空间。
  7. 将目标分支工作区中的新更新文件与签入文件进行比较。根据需要进行任何更正。
  8. 在目标分支上签入新的更新文件。
  9. 在架子集分支上回退未搁置的文件。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.