是否可以仅通过 tfs/tfpt 中的一些操作从一个分支的两个版本的差异中创建一个搁置集?
例如,从(变更集 2013 -> 变更集 2034)创建一个搁置集
可以从具有一些限制的变更集创建搁置集。我需要从分支回滚更改以将其从发布中删除,但它也不在任何其他分支中,因此我想将更改保留在搁置集中。我实现了如下:
您可以将此技术应用于问题中描述的情况,但这将需要大量的手动工作,因为必须为每个变更集重复它。它还会在 TFS 中产生很多混乱,因为您也必须检查回滚的回滚。
不,这是不可能的。变更集和搁置集是不同的东西,具有不同的目的。您可能可以编写一个插件来完成您所追求的事情(检索变更集,检查文件,搁置文件)。
这并非不可能。从技术上讲,您可以做到,尽管您可能不想这样做。我会让读者自己决定。
您可能希望在新工作区中执行此操作。
现在您可以创建搁置集。
如果您能够专注于特定文件夹,那么它会运行得更快,并且您可以将其自动化。这是将执行此操作的示例命令行。我刚试过,它对我有用。
在本例中,我从根目录指向一个名为“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
每个提交都会创建一个搁置集。所以我们可以找到在提交启动时创建的搁置集。那将有完全相同的变化。我们不需要创建新的搁置集。
虽然此解决方案不涉及纯 TFS 解决方案,但它不涉及像 Lee Richardson 的回答那样处理 TFS 变更集历史。
您可以使用Git-TFS克隆 TFS 存储库或分支,然后从以前的提交(TFS 签入)创建一个新分支,从较新的提交重新应用更改并将其作为搁置集发布:
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
从您要追溯创建搁置集之前发生的提交创建一个新分支:
$ git checkout -b CCCCCCC
签出要为其创建搁置集的提交中的更改:
$ git checkout BBBBBBB -- .
提交这些暂存文件:
$ git commit -m "Committing stuff for a retroactive shelveset that does X, Y and Z."
创建搁置集:
$ git tfs shelve my_retroactive_shelveset HEAD
优点
这可以使 TFS 变更集历史保持干净,而无需您还原变更集,创建搁置集以取消还原先前还原的变更集。
由于搁置集是从 Git 中的一个分支创建的,因此您可以删除该分支并仍然保持 Git-TFS 历史记录干净。
缺点