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