31

tfs/tfpt でいくつかの操作を行うだけで、1 つのブランチの 2 つのバージョンの差分からシェルブセットを作成することは可能ですか?

たとえば、(changeset 2013 -> changeset 2034) からシェルブセットを作成します。

4

5 に答える 5

95

変更セットからシェルブセットを作成することは可能ですが、いくつかの制限があります。ブランチから変更をロールバックしてリリースから削除する必要がありましたが、他のブランチにもなかったので、変更をシェルブセットに保持したかったのです。私は以下のようにこれを達成しました:

  • 変更セットをロールバックし、ロールバックをチェックインします。
  • ロールバック変更セットをロールバックします。これにより、元の変更を含む一連の保留中の変更が得られます。
  • 保留中の変更を棚上げします。

この手法を質問で説明されているケースに適用できますが、変更セットごとに繰り返す必要があるため、多くの手作業が必要になります。また、ロールバックのロールバックもチェックインする必要があるため、TFS で多くの混乱が発生します。

于 2014-08-14T11:12:05.603 に答える
3

不可能ではありません。技術的に言えば、やりたくないかもしれませんが、それを行うことができます。読者の判断にお任せします。

新しいワークスペースでこれを行うことができます。

  1. 問題の変更セットを取得します (新しいコード)
  2. すべてのソースを一時フォルダーに移動します。($tf フォルダーを移動しないでください)。ソース ツリーは空になっているはずです。
  3. 前の変更セットを取得します。
  4. 古いコードの上に新しいコードをミラーコピーする
  5. 調整を行います。

これでシェルフセットを作成できます。

特定のフォルダーに集中できる場合は、作業が速くなり、自動化できます。これを行うコマンドラインの例を次に示します。試してみただけでうまくいきました。

この例では、ルートから「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
于 2017-08-20T03:31:57.280 に答える
1

このソリューションには純粋な TFS ソリューションは含まれていませんが、Lee Richardson の回答のように TFS 変更セットの履歴をいじることはありません。

Git-TFSを使用して TFS リポジトリまたはブランチを複製し、以前のコミット (TFS チェックイン) から新しいブランチを作成し、新しいコミットから変更を再適用して、それをシェルブセットとして投稿できます。

  1. 変更セットを作成する前のコミットを探し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
    
  2. さかのぼってシェルブセットを作成するコミットの前に発生したコミットから新しいブランチを作成します。

    $ git checkout -b CCCCCCC
    
  3. シェルブセットを作成するコミットから変更をチェックアウトします。

    $ git checkout BBBBBBB -- .
    
  4. これらのステージングされたファイルをコミットします。

    $ git commit -m "Committing stuff for a retroactive shelveset that does X, Y and Z."
    
  5. シェルフセットを作成します。

    $ git tfs shelve my_retroactive_shelveset HEAD
    

利点

  • これにより、変更セットを元に戻したり、シェルブセットを作成して以前に元に戻した変更セットを元に戻したりする必要なく、TFS 変更セットの履歴がきれいに保たれます。

  • シェルブセットは Git のブランチから作成されたものであるため、そのブランチを削除しても、Git-TFS の履歴をクリーンに保つことができます。

短所

  • 純粋な TFS ソリューションではありません
于 2016-07-08T14:00:14.963 に答える
1

コミットごとにシェルブセットが作成されます。したがって、コミットが開始されたときに作成されたシェルブセットを見つけることができます。まったく同じ変更が行われます。新しいシェルフセットを作成する必要はありません。

于 2020-10-27T17:49:46.723 に答える