是否可以通過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