31

是否可以仅通过 tfs/tfpt 中的一些操作从一个分支的两个版本的差异中创建一个搁置集?

例如,从(变更集 2013 -> 变更集 2034)创建一个搁置集

4

5 回答 5

95

可以从具有一些限制的变更集创建搁置集。我需要从分支回滚更改以将其从发布中删除,但它也不在任何其他分支中,因此我想将更改保留在搁置集中。我实现了如下:

  • 回滚变更集并签入回滚。
  • 回滚回滚变更集。这给了我一组包含原始更改的待处理更改。
  • 搁置未决的更改。

您可以将此技术应用于问题中描述的情况,但这将需要大量的手动工作,因为必须为每个变更集重复它。它还会在 TFS 中产生很多混乱,因为您也必须检查回滚的回滚。

于 2014-08-14T11:12:05.603 回答
4

不,这是不可能的。变更集和搁置集是不同的东西,具有不同的目的。您可能可以编写一个插件来完成您所追求的事情(检索变更集,检查文件,搁置文件)。

于 2014-01-14T23:46:45.453 回答
3

这并非不可能。从技术上讲,您可以做到,尽管您可能不想这样做。我会让读者自己决定。

您可能希望在新工作区中执行此操作。

  1. 获取有问题的变更集(新代码)
  2. 将所有源移动到临时文件夹。(不要移动 $tf 文件夹)。源树现在应该是空的。
  3. 获取之前的变更集。
  4. 将新代码镜像复制到旧代码之上
  5. 做一个调和。

现在您可以创建搁置集。

如果您能够专注于特定文件夹,那么它会运行得更快,并且您可以将其自动化。这是将执行此操作的示例命令行。我刚试过,它对我有用。

在本例中,我从根目录指向一个名为“Src”的文件夹。将其更改为您的根文件夹。

md tmpws
cd tmpws
tf vc workspace /new /noprompt tmpws /location:local /permission:private

tf vc get "$/Src" /version:C2222 /recursive /noprompt

cd ..
md tmp
move "tmpws\Src" tmp

cd tmpws
tf vc get "$/Src" /version:C1111 /recursive /noprompt  /force /overwrite

cd ..
robocopy "tmp\Src" "tmpws\Src" /mir

tf vc reconcile /promote /adds /deletes /diff /recursive /noprompt

tf vc shelve /replace /noprompt mychange 

tf vc undo "$/Src" /recursive /noprompt
tf vc workspace /delete tmpws

cd ..
rmdir /q /s tmp
rmdir /q /s tmpws
于 2017-08-20T03:31:57.280 回答
1

每个提交都会创建一个搁置集。所以我们可以找到在提交启动时创建的搁置集。那将有完全相同的变化。我们不需要创建新的搁置集。

于 2020-10-27T17:49:46.723 回答
1

虽然此解决方案不涉及纯 TFS 解决方案,但它不涉及像 Lee Richardson 的回答那样处理 TFS 变更集历史。

您可以使用Git-TFS克隆 TFS 存储库或分支,然后从以前的提交(TFS 签入)创建一个新分支,从较新的提交重新应用更改并将其作为搁置集发布:

  1. git log在要为其创建变更集的提交之前查看提交:

    $ git log --oneline
    
    AAAAAAA Newest commit
    BBBBBBB The commit for which I want a shelveset
    CCCCCCC The commit where I will create a new branch from
    
  2. 从您要追溯创建搁置集之前发生的提交创建一个新分支:

    $ git checkout -b CCCCCCC
    
  3. 签出要为其创建搁置集的提交中的更改:

    $ git checkout BBBBBBB -- .
    
  4. 提交这些暂存文件:

    $ git commit -m "Committing stuff for a retroactive shelveset that does X, Y and Z."
    
  5. 创建搁置集:

    $ git tfs shelve my_retroactive_shelveset HEAD
    

优点

  • 这可以使 TFS 变更集历史保持干净,而无需您还原变更集,创建搁置集以取消还原先前还原的变更集。

  • 由于搁置集是从 Git 中的一个分支创建的,因此您可以删除该分支并仍然保持 Git-TFS 历史记录干净。

缺点

  • 它不是纯粹的 TFS 解决方案
于 2016-07-08T14:00:14.963 回答