web-dev-qa-db-ja.com

TFSが最新にならないのはなぜですか?

なぜTFSが常に最新の作業を取得しないのですか?

あなたはその機能が徹底的にテストされていると思っていただろう。

私がしなければならないのは、特定のバージョンを取得してから、書き込み可能なファイルの上書きとすべてのファイルの上書きの両方をチェックすることです。

私のローカル設定は台無しになっていますか、それともこれを行いますか?

172
Blankman

TFSは、「最新版を取得」の機能を再定義しました。 TFSの用語では、Get Latestはファイルの最新バージョンを取得することを意味しますが、サーバーが既にワークスペースにあると考えるファイルを無視します。私にとっても、地球上の他のすべての人にとっても、これは間違っています。

このリンクを参照してください: http://blogs.Microsoft.co.il/blogs/srlteam/archive/2009/04/13/how-get-latest-version-really-works.aspx

目的の処理を実行する唯一の方法は、特定のバージョンを取得してから、[上書き...]ボックスの両方をオンにすることです。

116
NotMe

時々Get specific version両方のチェックボックスをオンにした場合でもは最新のファイルを取得しません。おそらくファイルに変更を加えたので、最新バージョンを再取得してそれらの変更を取り消す必要があります。まあ...それはUndo pending changesの目的であり、Get specific versionの目的ではありません。

疑わしい場合:

  • ファイルの保留中のチェックインを元に戻す
  • 後で比較を行い、ファイルが期待されるバージョンと一致することを確認します
  • その後、プロジェクト全体で再帰的な「比較」を実行して、他に何が違うかを確認します
  • 保留中の変更ウィンドウを監視し、互換性のない保留中の変更を解決するために「サーバーのバージョンを取得する」をチェックする必要がある場合があります

そして、これは私がちょうど発見した私のお気に入りです:

  • このようなメッセージのOutputウィンドウに注意してください:

    警告-保留中の編集があるため、R:\ TFS-PROJECTS\www.example.com\ExampleMVC\Example MVC\Example MVC.csprojを更新できません。

このcriticalメッセージは出力ウィンドウに表示されます。他の通知はありません!保留中の変更には何もありません。また、明示的に要求したファイルが取得されなかったことを通知する他のダイアログメッセージもありません。そして、はい-Undo pending changesを実行してファイルを取得するだけでこれを解決できます。

41
Simon_Weaver

TFSは、Perforceなどの他のソース管理プロバイダーと同様に、システムが最後に取得したバージョンが何であるかを知っているため、これを行います。編集する前にルールに従ってプレイし、実際にチェックアウトする場合、問題を混同することはなく、「最新の情報を取得する」というのは本当にそうです。

これまで見てきたように、すべてを再評価するように強制することができます。これにより、帯域幅の使用量が大幅に増えますが、SourceSafeの使用方法により近くなります。

12
Rowland Shaw

どのように機能しないかの例なしにステートメントに応答することは困難ですが、TFVC(TFS 2012より前のメカニズムであった「サーバーワークスペース」モードで)は状態を検査しないことを理解することが重要ですローカルファイルシステム。 TFVCサーバーワークスペースは、「チェックアウト-編集-チェックイン」タイプのシステムであり、これは設計によるものであり、ワークスペースの状態を判断するために必要なファイルI/Oの量を大幅に削減するための意図的な決定です。代わりに、ワークスペース情報がサーバーに保存されます。

これにより、TFVCサーバーワークスペースは、非常に効率的にveryの大きなコードベースに拡張できます。マルチギガバイトのコードベース(Visual StudioやWindowsソースツリーなど)を使用している場合、クライアントはローカルファイルシステムをスキャンする必要はありません。変更された可能性のあるファイルを探す必要があります。ファイルを編集するときに、ファイルを明示的にチェックアウトします。

ファイルを書き込み専用としてnotマークし、最初に明示的にチェックアウトせずに変更することが期待されています。このルートをたどると、サーバーはファイルに変更を加えたことを認識せず、「Get Latest」操作を実行してもローカルワークスペースがnot更新されます。変更を加えたことをサーバーに伝えませんでした。

このメカニズムをdo破壊すると、tfpt reconcileコマンドを使用して、ローカルで行った変更についてローカルワークスペースを調べることができます。

「特定バージョンの取得」を使用して「強制」および「上書き」オプションを選択した場合、TFSのすべての実施をバイパスする傾向がある可能性が非常に高い自分を傷つけないように実装されています。おそらくTFVCローカルワークスペースを検討する必要があります。

TFVCローカルワークスペースは、「edit-merge-commit」タイプのバージョン管理システムを提供します。つまり、編集する前にファイルを明示的にチェックアウトする必要がない必要がないことを意味しますディスク上では読み取り専用ではありません。代わりに、ファイルを編集するだけで、クライアントはファイルシステムをスキャンし、変更に気付き、これを保留中の変更として提示します。

TFVCローカルワークスペースは、きめ細かいアクセス許可制御を必要としない小規模なプロジェクトに推奨されます。ワークフローがはるかに優れているためです。オンラインである必要はなく、ファイルを編集する前に明示的にチェックアウトする必要はありません。

TFVCローカルワークスペースはTFS 2012のデフォルトであり、有効になっていない場合は、サーバー管理者に問い合わせてください。 (非常に大きなコードベースまたは厳しい監査要件を持つ組織では、TFVCローカルワークスペースが無効になる場合があります。)

Eric Sinkの素晴らしい本 Version Control By Example は、checkout-edit-checkinとedit-merge-commitシステムの違いを概説し、一方が他方より適切な場合。

Professional Team Foundation Server 2013 ブックは、TFVCサーバーワークスペースとTFVCローカルワークスペースの違いに関する優れた情報も提供します。 MSDNのドキュメントとブログでも詳細情報が提供されています。

11
Edward Thomson

Team Foundation Server(TFS)は、$ TFという隠しディレクトリにローカルコピーを追跡します。「最新バージョンの取得」を発行すると、TFSはこのフォルダーを調べて、最新のコピーがあるかどうかを確認します。その場合、最新のコピーはダウンロードされません。元のファイルがあるかどうかは関係ありません。実際、(私の場合のように)フォルダー全体を削除した可能性があり、TFSは実際のファイルではなく変更を記録する隠しディレクトリを調べるため、最新のコピーをフェッチしません。この設計の欠点は、システム外で行われたものはすべてTFSに記録されないことです。たとえば、Windowsエクスプローラーでフォルダーまたはファイルを削除しても、TFSはそれを認識しません。それは完全に盲目になります。少なくとも、Windowsではこのファイルを削除することはできませんが、そうするはずです。

最新のコピーを強制する1つの方法は、非表示の$ TFフォルダーを手動で削除することです。それを行うには、コマンドプロンプトに移動し、プロジェクトがチェックアウトされたルートフォルダーに移動し、このコマンドを発行します

rd/s $tf                    // remove $TF folder and everything inside it

隠しフォルダーのみを確認する場合は、次を使用して実行できます。

dir /ah                    // display hidden files and folders

注:これを行うと、tfは、ファイルにローカルコピーがあるにもかかわらず、ローカルコピーがないと判断し、すべてを再度同期します。

注意:この方法は自己責任で使用してください。重要な作業には使用しないでください。

6
Hammad Khan

残念ながら、TFS 2008には1つ以上のバグがあります。この問題は、開発者のマシンで定期的に発生し、私が働いているサーバーを構築するためです。

Get Latestを実行できます。プロジェクトの履歴リストで、最後にGet Latestを実行した後にコミットがあったことがわかります。ディスク上のファイルには何も触れませんでしたが、「Get Latest」機能はTFSタブをチェックすると、いくつかのファイルがまだ最新バージョンではないと言っています。

明らかに、TFSは古いファイルがローカルにあることをリストで確認できるため、リストにそのように記載されています。それでも、Get Latestはそれを実行できず、最新バージョンを取得します。私があなたがしたことをしたら、特定バージョンを取得を使用し、ダイアログの下部にある2つのチェックボックスをオンにすると、ファイルが取得されます。

代わりに常に特定バージョンの取得タイプの関数を使用するようにビルドサーバーを変更したため、この部分は機能するようになりましたが、ビルドサーバー(TeamCity)は、ビルドを開始するためにファイルに変更があるかどうかの確認にも依存しています、「何も変更されず、ここに表示されるものは何もない」モードになり、ビルド構成を強制的に実行するまで何もしません。

手動で両方とも最新のビルドを取得することを除いて、触れていないマシンでこの問題を経験しているので、ファイルを改ざんすることはありません。 TFSが混乱しているだけです。

これが発生したとき、ディスク上のファイルが実際に以前に取得したバージョンとバイナリが同一であることが確認されたため、ファイルを手動で改ざんすることはありませんでした。

また、実際に内容を確認せずに、TFSがディスク上のファイルが変更されたかどうかを「知る」方法を確認できません。 TFSの一部がファイルが実際に最新バージョンではないことを確認できる場合、Get Latestバージョンは絶対に最新バージョンを取得できるはずです。これは、他の回答へのコメントを参照してください。

あなたは同じユーザーとしてTFSにログインしており、ワークスペース名(デフォルトではマシン名に基づいている)も同じであるため、TFSはあなたが同じマシンと同じワークスペースにいると考えているため、すでに最新バージョンがありますファイル、それはあなたのためにそれらを取得しません。

マシンの名前を変更して、新しいワークスペースを新しいマシンとして作成してください。

3
WalkingCat

私が見る最も愚かなことは、ローカルファイルが何らかの理由で削除された場合でも、「最新バージョンの取得」は何もしないということです。ローカルファイルが少なくとも存在することを確認することは、かなり明白なことだと思っていたでしょう。しかし、なぜサーバー上の各ファイルのタイムスタンプと、最後に取得した(ローカルに保存できる)時間を比較できないのは、私を困惑させます。

3
Dylan Nicholson

デフォルトで「最新バージョンを取得」は、「最新バージョンを取得」を最後に実行してからサーバー上で変更されたファイルのみをダウンロードします。 TFSはダウンロードしたファイルを追跡するため、同じバージョンのファイルを再度ダウンロードするのに時間を費やすことはありません。 Visual Studioの外部でファイルを変更している場合、これにより、一貫性の問題が発生する可能性があります。

3
David

Visual Studio 2012でも同じ問題が発生しました。何をしても、TFSソース管理からコードを取得できませんでした。

私の場合、原因はソース管理からフォルダー+サブフォルダーを個別にマッピングしていましたが、ローカルHDの同じツリーにマッピングしていました。

解決策は、「ワークスペースの管理」ウィンドウを使用してサブフォルダーのマッピングを削除することでした。

2
Nir

同じアカウントを持つ2つの異なるマシンからTFSを使用する場合に発生する可能性があります。変更されたファイルを確認してチェックアウトし、最新のものを取得して保留中の変更を取り消してチェックアウトを削除する必要がある場合

1
Mohamed Badr

これは私のために働いた:
1。 Visual Studioを終了します
2。コマンドウィンドウを開き、フォルダー「%localappdata%\ Local\Microsoft\Team Foundation \」に移動します
3。すべてのバージョンのサブフォルダーに移動し、サブフォルダー「キャッシュ」とそのコンテンツを削除します
4。 Visual Studioを再起動し、TFSに接続します。
5。最新バージョンの取得をテストします。

1
Ludwo

この問題に遭遇したときに最新バージョンとバージョンの不一致が発生した場合、最初に「特定バージョンの取得」を変更セットに設定して1に設定します。これにより、ローカルワークスペース(そのプロジェクト、フォルダー、ファイルなど)、TFSの更新も行われるため、バージョンがダウンロードされていないことがわかります。その後、「Get Latest」とビオラを実行できます。実際には最新の

1
mjlarezzo

Get Latestが期待することをしないと不満を言う開発者で私が見た問題のほとんどは、Source Control ExplorerではなくSolution ExplorerからGet Latestを実行しているという事実に起因します。ソリューションエクスプローラーは、ソリューションの一部であるファイルのみを取得し、ソリューション内のファイルに必要な可能性があるため、ソース管理の一部を無視しますが、ソース管理エクスプローラーはローカルワークスペースをサーバー上のリポジトリと比較して、どのファイルを決定します必要です。

1
levelnis

tFSを追加したいだけですMSBuildはフォルダ上の特殊文字、つまり「@」をサポートしていません

私は過去にExternal @ Project1という名前のプロジェクトフォルダの1つを経験しました

tFSビルド定義を作成してカスタムmsbuildファイルを実行すると、ワークスペースフォルダーが最新のワークスペース取得中にExternal @ Project1フォルダーにコンテンツを取得しません。 tfs getは失敗しているようですが、エラーは表示されません。

試行錯誤の後、フォルダの名前を_Project1に変更しました。出来上がり、フォルダ(_Project1)にファイルがあります。

0
bherto39

ツール:TFS Power Tools

出典:http://dennymichael.net/2013/03/19/tfs-scorch/

コマンド:tfpt scorch/recursive/deletes C:\ LocationOfWorkspaceOrFolder

これにより、ファイルのリストを削除またはダウンロードするように求めるダイアログボックスが表示されます。それに応じてファイルを選択または選択解除し、[OK]を押します。グリッドの外観(CheckBox、FileName、FileAction、FilePath)

原因:TFSはワークスペース内のアイテムとのみ比較します。ワークスペースの外部で変更が行われた場合、TFSはそれらを認識しません。

うまくいけば、誰かがこれを役に立つと思います。さまざまな場所にある少数のフォルダーを削除した後に、この投稿を見つけました。どのフォルダを削除したか覚えていないので、通常使用する強制取得/置換オプションは除外されました。

0
Nick

私の場合、特定のバージョンを取得し、両方のチェックボックスをオンにして保留中の変更をすべて取り消すこともできませんでした。

ワークスペースを確認しました。現在のワークスペースを編集します。すべてのパスを確認します。ソリューションパスが正しくなく、削除されたフォルダーを指していました。

パスを修正し、最新版が正常に機能するようにしました。

0
Himanshu Patel