tfs 2008で別のブランチへの棚上げを解除できますか?


105

私のチームの一部の開発者がブランチAで行った変更を棚上げしたと仮定しましょう。そしてブランチBで作業しています。ブランチBへの変更を保留解除できますか?(GUIまたはコマンドプロンプト)


上記のコマンドのデモ:Unshelve command basics
Rohit

回答:


129

Visual Studioのパワーツールは、あなたがこれを行うようにする必要があります。

C:\src\2\Merlin\Main>tfpt unshelve /?
tfpt unshelve - Unshelve into workspace with pending changes

Allows a shelveset to be unshelved into a workspace with pending changes.
Merges content between local and shelved changes. Allows migration of shelved
changes from one branch into another by rewriting server paths.

Usage: tfpt unshelve [shelvesetname[;username]] [/nobackup]
                     [/migrate /source:serverpath /target:serverpath]

 shelvesetname          The name of the shelveset to unshelve
 /nobackup              Skip the creation of a backup shelveset
 /migrate               Rewrite the server paths of the shelved items
                        (for example to unshelve into another branch)
 /source:serverpath     Source location for path rewrite (supply with /migrate)
 /target:serverpath     Target location for path rewrite (supply with /migrate)
 /nobackup              Skip the creation of a backup shelveset

たとえば、Branch1で作成された "Shelve Set Name"という名前のシェルフセットをBranch2にマージするには、次のコマンドを使用します。

>tfpt unshelve "Shelve Set Name";domain\userName /migrate /source:"$/Project/Branch1/" /target:"$/Project/Branch2/"

2
うーん...カルト、あなたはちょうど私の日を作ったと思います。私は後でそれを試さなければならないでしょう。
Herms

電動工具はどこから入手できますか?
ガイ

3
そうです、パワーツールはこれを可能にするべきですが、残念ながら毎回マージがひどく間違っているので、役に立たないのです。
Tim Booker、

マージはそれほど悪くありません。自動マージがケースの90%で機能することがわかりました。
ジャスティン・ラッド

2
試してみただけです。シェルフセット内の多くのファイルを移動しましたが、残念ながらこれはうまくいかないようです。これらすべてのファイルを手動で「移行」する必要があります(複数選択もありません)。そして、それらは新しいファイルとしてワークスペースに追加されます。もう結合できないので使えません。
Stefan Steinegger、

34

各ファイルを手動でマージする必要を回避するtfptの代替ソリューション

tfsパワーツールの問題は、「ベースレスマージ」を実行しているため、すべてのファイルを確認する必要があることです。800以上のファイルのシェルフセットがあり、「自動マージ」ボタンを信頼しなかったため、各ファイルを順番に処理したくありませんでした。そのため、別の方法を見つける必要がありました。

  • TFS Shelveset Sidekickをダウンロードしてインストールします。
  • ツールはVS2010の[ツール]に表示されます
  • 'Shelveset Sidekick'ツールを実行し、[Search]をクリックしてシェルフセットを表示します
  • シェルブセットを右クリックして、「シェルブセットのエクスポート」を選択します
  • 次のような空の場所に保存します C:\temp\shelveset-name
  • これで、新しいファイルだけを含む完全なディレクトリ構造ができました。

(注:エクスポートの際に進行状況バーはありません-エクスポートに時間がかかる大きなシェルブセットがある場合は、Windowsエクスプローラー(ファイル>プロパティ>サイズ)でファイルがまだダウンしていることを確認する必要があります。凍っていると思う)。

Windowsエクスプローラーを使用して、それらを新しいブランチにコピーするだけです。

これは私のために働きました:

  • 最初にソリューション全体をチェックアウトする(新しいブランチで)
  • その解決策を閉じる
  • VS内からTFSをオフラインにします(これを行うツール)- これが重要な理由については、以下を参照してください...
  • Windowsエクスプローラでファイルをコピーします。のディレクトリ構造はc:\temp\shelveset-name、新しいブランチに対応するように名前を変更する必要があります。ヒント:必ず正しい場所にコピーしてください!!!
  • VSをオンラインにする
  • すべての変更を検出し、新しいファイルを追加する必要があります
  • ソースコントロールをバインドするように求められたら、パスが新しいブランチに対して正しいことを確認してください。
  • テスト-次に新しいファイルをチェックインします

重要:最初にTFSをオフラインにしないと、小さな赤いチェックマークが付いていない(アンシェルフチェンジセットからの)新しいファイルが表示され、それらを再度除外して含める必要があることがわかりました。追加してもらいます。誰かがこの問題の代替ソリューションを持っている場合、私は知りたいと思います-更新は機能しないようです。


この方法は、大きな棚板の方が簡単で、私が従った方法です。ありがとう!
アニ

この方法は、より大きな棚セットに適しています
Aamir

TFSをオフラインにせずに逃げることができます。しかし、それだけの価値があるかどうかはわかりません。私が行ったのは、比較アクションを実行することでした-ソース管理エクスプローラーで、関連フォルダーで開いたコンテキストメニューから。出力をフィルタリングして、異なるアイテムのみを表示できます。次に、それらを複数選択して、一度にすべてをチェックアウトできます。しかし、TFSをオフラインにするのは、それよりも速くて簡単です。
マーク

残念ながら、シェルブセットに「追加」の変更がある場合、これは機能しません。「保留されたファイルを取得できませんでした。ファイルの保留された保留中の変更が必要です」というエラーが表示されます。
John Saunders、

@JohnSaundersあなたはブセットを意味いずれかが追加されます排他的に追加しますか?私は何年もこれを行う必要はありませんでした:)
Simon_Weaver

1

シェルフ情報には、シェルフへの特定のパスが含まれています。残念ながら、棚上げされた場所以外の場所に棚上げを解除する自動方法は知りません。私がこれを実行したかったときは、新しいブランチの同等のファイルをチェックアウトし、古いブランチからシェルフを解除して、手動でファイルをコピーする必要がありました。

編集:まあ、私はそれを難し​​い方法でやっていたと思います。Curtのソリューションを試してみる必要があります。:)


0

私はこれを成し遂げるためにかなりの時間を費やし、克服すべき問題はほとんどありませんでした。可能ですが、ここではいくつかの問題とこれらの問題を回避するために従うべきいくつかのルール

エラー:

ワークスペースを判別できません

この特定の問題は、ソースブランチのルートフォルダーからコマンドを実行することで解決されました。これは、SOで「ターゲット」ブランチを使用すると回答しているいくつかの回答とは逆です-いいえ、「ソース」を使用します。

cd [your !!source!! branch root]
tfpt unshelve /migrate /source:"$/MyCollection/Development/Maint1.1" /target:"$/MyCollection/Development/Maint1.2" "myShelveset;UserName"

この後第2号が出ました。TFSサーバーに接続できなかったようです。複数のVSがインストールされ、さまざまなTFSサーバーに接続されています。VS12を使用していて、ワークスペースとサーバーに接続していました。しかし、TFPT2013を機能させるには、同じ接続をVS13でレプリケートする必要があることを理解していませんでした。同じサーバーとワークスペースに接続します。

私もTFPT2015を使用してそれをやろうとしましたが、それをインストールし、それはTFPT.exeをインストールしなかったため、役に立たなかった。だから私はTFPT2013からTFS2015まで試してみましたが、この特定のコマンドで動作しました。VS12 / 13がTFS2015に対して問題なく機能するのはなぜでしょうか。

要約する

  • CMDまたはDevCMDを使用-関係ありません
  • ソースブランチのルートフォルダーからコマンドを実行する
  • 特定のVSのチームエクスプローラサーバー接続を確認する
  • TF Power Tools 2013はTFS v15に対して機能し、少なくとも移行オプションは機能します

0

次の手順は、小さなサイズの棚(20ファイル以下)に使用できます。

  1. シェルブセットブランチとターゲットブランチで、保留中のすべての更新をチェックインまたはロールバックすることから始めます。
  2. shelvesetブランチで、該当するシェルブセットからファイルのシェルフを解除します。
  3. ターゲットブランチで、シェルフ解除されたシェルブセットにあった既存のファイルをチェックアウトします。
  4. shelvesetブランチのシェルフされていないファイルをターゲットブランチのファイルと比較して、マージの更新が必要なファイル(ある場合)を特定します。
  5. 必要に応じて、前のステップの該当するファイルを手動でマージ更新し、これらのファイルをターゲットのブランチワークスペースに保存します。
  6. 他のシェルブセットファイルをシェルブセットブランチワークスペースからターゲットブランチワークスペースにコピーします。
  7. ターゲットのブランチワークスペースで新しく更新されたファイルを、チェックインされたファイルと比較します。必要に応じて修正します。
  8. ターゲットブランチの新しい更新済みファイルをチェックインします。
  9. シェルブセットブランチで未保存のファイルをロールバックします。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.