TFS:バッチファイル内の変更されていないファイルのチェックアウトを取り消す方法


172

バッチファイルを使用してコードを生成し、生成されたファイルをTeam Foundation Server(TFS)から自動的にチェックアウトして、ファイルを再生成できるようにします。これらのファイルの大部分は変更されていませんが、ジェネレータはこれを事前に認識していません。

「tfs undo」コマンドはチェックアウトを元に戻しますが、一部が変更された場合は(それを実行したくない)、プロンプトを表示します。また、生成されたファイルをすぐにチェックインしたくありません。

ユーザーにプロンプ​​トを表示せずに、変更されていないすべてのファイルのチェックアウトを元に戻すコマンド(または一連のコマンド)はありますか?


手動に関するプロンプトが表示されたら、ファイルを「すべていいえ」を選択するのを期待してすべての変更を元に戻すことを注意していることが取り消しになるように変更は、正常に動作しませんADD(参照メッセージを表示せずに変更をレイの答えを)。
Elaskanator

回答:


202

Team Foundation Server Power Tools 2011年8月の Undo Unchangedコマンドをご覧ください。

c:\myProject> tfpt uu . /noget /recursive

リンクを更新してくれたMatt Florenceに感謝します。

実際の構文についてはレイ・ベガに感謝します


1
これを編集/マージして、回答コンテンツの一部として使用情報を含める必要があります。
mcw 2011

4
あなたは本当にこの投稿を読みたいです:aaubry.net/undo-checkout-on-unchanged-files-tfs.html
Byron Whitlock

17
うーん、ほとんどすべての人が毎日数回行うことを考えています:「パワーツールと呼ばれる別のインストーラーに入れ
ましょう

1
あなたが思うだろう@マイクチャリイ。私は今TFSを試してみて、これを行う方法を探していて、ここで終わりました。
vidstige 2012年

3
変更がマージである場合は機能しません。ファイルの変更がなくても、tfpt uuは常にマージを実際の変更と見なし、その動作を反転させるオプションはないようです。これはデフォルトの動作としては問題ありませんが、必要な動作にならない場合もあります。
user1164178 2014

124

Team Foundation Server Power Toolsをインストールし、プロジェクトのワークスペースディレクトリのルートにあるtfpt.exeを使用して、コマンドラインから次のコマンドを実行します。

c:\myProject> tfpt uu . /noget /recursive

これを含めること/nogetを強くお勧めします。これにより、合計数によっては非常に長い時間がかかる可能性のある、プロジェクトのすべてのファイルを強制的に「最新にする」ことができなくなります。


12
これは受け入れられる答えである必要があります。関連する詳細がすべて含まれています(高いスコアで証明されます)。
rikoe

7
涼しい。また、これをVisual Studioの永続的な「外部ツール」として追加してみませんか。これを例にとります:blog.kurtschindler.net/post/…コマンド:[インストールディレクトリ] \ TFPT.EXE引数:uu。/ noget / recursive初期ディレクトリ:$(SolutionDir)
rohancragg '31 / 10/31

12
質問では、プロンプトなしでこの操作行うことを指定していますが、どの回答もこれに対処していないようです。これが必要な場合は、追加の/ nopromptが探しているオプションです。PowerToolsのドキュメントにはこれがありません!いくつかのコマンドではこのオプションがリストされていますが、このオプション(UU)ではありません。注意してください!
ジョニーカウフマン

1
@ user20358 cdワークスペースディレクトリがある場所(たとえば、mine was c:\myProject)または明示的に含めますuu(ピリオド.をそれに置き換える)
Ray

/ Yや/ forceなどの強制スイッチはありますか?本当に元に戻すかどうか常に尋ねられますが、それを自動化したいと思います。/ Yをそこに置きますが、オプションYには値が必要です。
Squirrelkiller

118

@mike&@ray、ありがとう

もっと簡単にしたいです。

VSの[ツール]メニューで、[外部ツール]をクリックします。

外部ツール

追加をクリックします。

タイトルを入力してください。

コマンド:tfpt.exe

引数:uu。/ noget / recursive

初期ディレクトリ:[矢印ボタンから選択できます]。

ソリューションで変更せずに元に戻す

プロジェクトで変更せずに元に戻す

[ツール]メニューに2つの新しいコマンドが追加されました。

必要に応じて使用してください。

楽しい、

Ofir


3
とてもかっこいい。あなたは、さらに一歩進んで、ショートカットを追加することもできます。追加したコマンドがどれだけ下にあるかに注意してください(たとえば、4番目のコマンドの場合があります)。次に、[ツール]-> [オプション]-> [環境]-> [キーボード]に移動し、[次を含むコマンドを表示]テキストボックスに「Tools.External」と入力して、ショートカットを割り当てます。たとえば、新しく追加した元に戻すコマンドが4番目のコマンドだったので、Tools.ExternalCommand4を選択しました。次に、ショートカットキーCtrl + Alt + U、Ctrl + Alt + U
Mario

1
これの更新版をいただけますか?tf.exeが見つかった場合、uuコマンドとは何ですか?認識できないコマンド:uuがわかります。助けてくれてありがとう
Shay

1
@Shay:最新のTFS電源ツールがインストールされているVS2015で動作します。
Igor Malin

27
  1. プロジェクトを右クリックします
  2. [チェックアウトを元に戻す]を選択し、[OK]をクリックするか、確認がすべて残っています...
  3. 次に、チェックアウトを元に戻しているときに、REALの変更が含まれているすべてのファイルについて、そのファイルのチェックアウトを確認するように求めるプロンプトが表示されます...「すべていいえ」をクリックするだけです

Visual Studioは、チェックアウトされたファイルに変更があるかどうかを認識します。

警告:この方法では、新しいファイル、つまりTFSにまだチェックインされていないファイルも削除されます。これらのファイルを保持したい場合は、単に「元に戻す」ファイルのセットから除外してください。


14
Be aware that this method also removes added files that are not yet checked in from TFS....ええ、それはかなり即時の失格です。
shortstuffsushi

1
それは私のベースレスブランチのマージに動作します。ありがとう。通常、この場合、VSはソリューション内のすべてのファイルを変更済みとしてマークしました。
KoViMa 2016

2
これは、更新する必要のない10000個のファイルをnugetがチェックアウトするときの地獄です。
Ievgen Naida、2018

13

TFS2017およびVS2017 / VS2019でのみ作業する場合の回答でこの質問を更新しました。

TFS 2017用のパワーツールは存在せず、古いツールはそれとうまく連携できませんが、機能のほとんどはVS2017自体またはプラグインに移動されているようです(以下を参照)。

Visual Studio 2017/2019拡張機能

変更されていないファイルを元に戻すなどの一部のアクションが

VS2017の拡張機能

VS2019の拡張

「Unchange Unchanged」ボタンの位置:

変更されていないボタンの位置を元に戻す

既知のバグ

「ソース管理エクスプローラー」を開いて(開いたままにする)、「保留中の変更」ビューの「アクション」メニューに「変更を元に戻す」が表示されるようにする必要があります。 ここで報告した

Windowsシェル統合拡張機能

また、TFS Power Toolsにリンクされなくなった別のインストーラーを使用して、Windowsシェル統合をセットアップすることもできます。

Windowsシェルの統合は、以前のpowertoolsとまったく同じようには機能しませんが、最も重要なアクションが機能しました。


私は質問で気づきました、彼らはそれをスクリプト化したいのですが、私には解決策がないので、私は恐れています
Schwarzie2478

1
リンクされた拡張機能をインストールした後、VS2017で[Undo Unchanged]オプションが見つかりません。私は何か見落としてますか ?
Erzékiel

あまり使っていません。それを使用して顧客のためにテストしたとき、チームエクスプローラーで少しクリックして、元に戻す変更があることを確認する必要がありました。このオプションが表示されるのは、コミットのキューに保留中の変更がある場合にのみ表示される可能性があります。(または1つのブランチのみが変更されます)...
Schwarzie2478

2
@Erzékielこのオプションは、ソリューションエクスプローラーが開いて準備ができている場合にのみ表示されます。
MatrixRonny

1
この拡張機能は時々機能し、その存在ソリューションエクスプローラーではなくTFS ソース管理エクスプローラーを開くことに関係しています(誤って指摘されているように)-2つの異なるコントロールウィンドウを混同しないでください。しかしながら; 私が時々言うとき、それは行き来するからです。今私はそれを持っていません、私は一ヶ月前にしました。これは少しバグが多く、Resharperなど、他の拡張機能が原因であると思います。
クリスチャン

8

チェックアウトしたすべてのファイルを再度チェックインするだけの場合、TFSはどのファイルが変更されたかを把握し、サーバーに記録されているチェンジセットにのみそれらを含めることができるほど賢いです。

TFSは、チェックインの前後にファイルの内容のMD5ハッシュを比較することでこれを行います。

これはすべて、生成プロセスが同じファイルのセットを純粋に更新していることを前提としています。つまり、前の世代で生成されたファイルが次の世代で必要ない場合はありません(つまり、削除を保留する必要があります)。そのファイルの場合)またはファイルの名前が変更されること。

プロセスでファイルの削除が必要になる可能性がある場合、最善の策は、Team Foundation Power Toolsコマンド(tfpt)を確認し、変更されたファイルのみをチェックアウトするtfpt onlineコマンドを使用することです。不要になったファイルの削除を保留するか、名前を変更して保留を追加します。

幸運を、

マーティン。


6
ありがとうございます。ただし、その時点で変更されたファイルをチェックインしたくありません。機能が完了するまで、変更されたものはチェックインしないでください。ただし、開発者が変更を確認できるように、変更されていないものは削除する必要があります。
Robert Wagner、

@RobertWagnerゲーテッドビルドを使用している場合、変更が最初にビルドされなければならないというポップアップアラートが表示されたら、キャンセルできます(同じファイルが検出されても中止されない場合)。
Elaskanator

6

TFSを元に戻しても、ファイルシステムの「変更日」の値は元に戻らないことに注意してください。これは、特にrobocopyなどのツールを使用してリモートマシンを同期する場合、非常にイライラします。チェックアウトを取り消した後でも、ファイルを保存して「更新日」の値を更新すると、チェックアウトを取り消した後でも、更新された値が残ります。


1
robocopyまたはVCSのいずれかを使用します。混合を使用すると、常に不整合が生じます。VCSから各マシンに直接データを入力する方がはるかに良いでしょう。
Richard

4

tfptのuuオプション(他のほとんどの回答で推奨)に関して、最初ははっきりしなかった点がいくつかあります。まず、これはコマンドでアクセスできるコマンドラインヘルプです。tfpt uu /?

保留中の冗長な変更を元に戻します。保留中の変更があるアイテムの状態がサーバー上と同じ場合、変更は元に戻されます。

使用法:tfpt uu [/ changeset:changesetnum] [/ recursive] [/ noget] [filespec ...]

  • / changesetワークスペースを最新バージョンではなく指定されたチェンジセットバージョンのアイテムの状態と比較します
  • filespec ...冗長な変更がないかリストされたfilespecのみを確認してください
  • / recursive指定されたファイル仕様を完全な再帰でチェックします
  • / nogetチェック前にgetを実行しません

/ changesetオプションは、filespecsまたは/ recursiveでは使用できません。

ここで、他の回答で推奨されているコマンドを分析します。

tfpt uu . /noget /recursive
  • tfpt uu 「Undo Unchanged」コマンドを使用することを指定します。
  • . (おそらく)現在の作業ディレクトリをファイル指定として使用する必要があることを示します。
  • /noget 変更されていないファイルを元に戻す前に、 'get latest version'が呼び出されないようにします。
  • /recursivefilespecだけでなく、すべての再帰的な子フォルダーとファイルも考慮されるようにします。これはファイル仕様に依存しているようです-何も提供されていない場合は、ワークスペース全体が処理されます。

上からのコマンドに関してここで注意すべきことがいくつかあります...

  • 作業ディレクトリに依存します。
  • ワークスペース全体を処理するわけではありません。

次のコマンドが私にとって最適であることがわかりました-ワークスペース全体を処理します。

tfpt uu /noget

これは、tfptがそれを使用して、どのワークスペースを処理する必要があるかを決定するという点で、依然として作業ディレクトリに依存していることに注意してください。ただし、ワークスペース内のファイルまたはフォルダーへのパスを指定する限り、問題ありません。


3

上記のレイライオンファングのアプローチを見ることができます。担当者がいないため、コメントできません。ツールなどに変更を加える必要がないので、このアプローチは気に入っています。

  1. プロジェクトを右クリックします
  2. [チェックアウトを元に戻す]を選択し、[OK]をクリックするか、確認がすべて残っています...
  3. 次に、チェックアウトを元に戻しているときに、REALの変更が含まれているすべてのファイルについて、そのファイルのチェックアウトを確認するように求めるプロンプトが表示されます。「すべていいえ」をクリックするだけです。
  4. Visual Studioは、チェックアウトされたファイルに変更があるかどうかを認識します。この方法では、TFSからまだチェックインされていない追加ファイルも削除されることに注意してください...

.......「No To All」を押すと、変更されていないいくつかのファイルが保持されるという点で、このアプローチには問題があります。実際に変更された最初のファイルに到達するまでは、変更されていないファイルを元に戻すなどのように動作し、意味のある場合は、変更されていない残りのファイルを無視します。この効果はたまにしか見たことがありません。

考えられる回避策は、上記のプロセスに従うことですが、「すべていいえ」をクリックする代わりに、各ファイルに対して「いいえ」をクリックします。これは、作業しているファイルの数によっては時間がかかる場合があるため、通常は「ALT + N」を押したままにします。変更されていないすべてのファイルを元に戻しながら、すべてのファイルを高速化します。


これは十分に強調することができないので助言してください。この方法では、プロジェクトに新しく追加されたファイルも削除されます。これは、他の回答についても言及しています。
クリスチャン

-20

私が理解している限り、TFSではチームプロジェクトをチェックアウトすると、プロジェクト全体がチェックアウトされ、どのファイルを停止するかを制御できなくなります。特定のファイルへのチェックインを防止する場合は、それらをロックできます。

職場では、みんなTFSが嫌いです。


1
私たちは、個々のファイルをチェックアウトすることができ、それをロックすることは、開発者がそれらをチェックインすることができません。
ロバート・ワグナー

5
反対票を投じようとしていましたが、「職場ではTFSが嫌いです」。それを保存しました。
James
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.