Tfs/tfptでのいくつかの操作だけで、1つのブランチの2つのバージョンの差分からシェルフセットを作成することは可能ですか?
例えばからシェルフセットを作成します(チェンジセット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履歴をクリーンに保つことができます。
デメリット