是否可以通过tfs/tfpt中的某些操作从一个分支的两个版本的差异创建一个shelveset?将变更集转换为搁置集
例如从(changeset 2013 - > changeset 2034)创建shelveset
是否可以通过tfs/tfpt中的某些操作从一个分支的两个版本的差异创建一个shelveset?将变更集转换为搁置集
例如从(changeset 2013 - > changeset 2034)创建shelveset
不,这是不可能的。更改集和搁置集是不同的东西,具有不同的目的。你也许可以写一个插件来做你正在做的事情(检索变更集,检查文件,搁置文件)。
这是可能的。看到我的答案。 – zumalifeguard
可以根据变更集创建一个shelveset,但有一些限制。我需要从一个分支回滚一个更改以将其从一个版本中删除,但它不在任何其他分支中,所以我想将更改保留在一个搁置集合中。我做到这一点如下:
您可以将此技术应用于问题中描述的情况,但这将需要大量的人工努力,因为它必须对每个变更集重复使用。它也会在TFS中产生很多混乱,因为你必须检查回滚的回滚。
@orange:你为什么不把它作为正确的答案?它解决了你的问题。 – floquet22
我刚刚发现了一个使用Git-TFS的工作流程,可以让你做到这一点。我希望明天发布一个答案。这不是人们要求的100%,但它不涉及如此不协调的工作流程。 –
虽然此解决方案不涉及纯粹的TFS解决方案,但它并不涉及TFS变更历史记录,例如Lee Richardson的答案。
您可以使用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历史干净为好。
缺点
这不是不可能的。从技术上讲,你可以做到,尽管你可能不想。我会让读者决定。
您可能想在新的工作区中执行此操作。
您可以创建搁置。
如果你能够将精力集中到特定的文件夹,然后它会走得更快,并且可以自动执行它。这里有一些可以做到这一点的示例命令行。我只是试了一下,它为我工作。
在本例中,我指向一个文件夹从称为“源”的根。将其更改为根文件夹。
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
什么是你想用这个来完成?可能有更好的方法来实现你的目标。 –
@DanielMann,我试图把我得到的架子应用到另一个分支。我不想要一个无基础的合并,太多标记为合并的文件。 – orange