なぜTFSは常に最新の作業を一貫して取得しないのですか?
あなたはその機能が徹底的にテストされているだろうと思ったでしょう。
私がしなければならないことは、特定のバージョンを取得し、両方の書き込み可能なファイルを上書きすることをチェックし、すべてのファイルを上書きすることです。
私のローカル設定が台無しになっていますか、それともあなたもこれをやっていますか?
なぜTFSは常に最新の作業を一貫して取得しないのですか?
あなたはその機能が徹底的にテストされているだろうと思ったでしょう。
私がしなければならないことは、特定のバージョンを取得し、両方の書き込み可能なファイルを上書きすることをチェックし、すべてのファイルを上書きすることです。
私のローカル設定が台無しになっていますか、それともあなたもこれをやっていますか?
回答:
TFSは「最新を取得」の機能を再定義しました。TFS用語では、Get Latestはファイルの最新バージョンを取得することを意味しますが、サーバーがすでにワークスペースにあると考えるものは無視します。私にとって、そして地球上のほとんどすべての人にとって、それは間違っています。
このリンクを参照してください:http : //blogs.microsoft.co.il/blogs/srlteam/archive/2009/04/13/how-get-latest-version-really-works.aspx
特定のバージョンを取得する唯一の方法は、特定のバージョンを取得し、[上書き...]ボックスを両方ともオンにすることです。
時にはGet specific version
でも、両方のチェックボックスをチェックし、あなたに最新のファイルを取得することはできません。ファイルに変更を加えた可能性があり、最新バージョンを再度取得してそれらの変更を元に戻したい場合。まあ...それUndo pending changes
はの目的であり、の目的ではありませんGet specific version
。
疑問がある場合:
そして、これは私が発見したばかりの私のお気に入りです:
Output
このようなメッセージについては、ウィンドウに注意してください。
警告-保留中の編集があるため、R:\ TFS-PROJECTS \ www.example.com \ ExampleMVC \ Example MVC \ Example MVC.csprojを更新できません。
この重要なメッセージが出力ウィンドウに表示されます。他の通知はありません!保留中の変更や、明示的に要求したファイルが取得されなかったことを通知する他のダイアログメッセージはありません。そしてはい-あなたはただ実行Undo pending changes
してファイルを取得することでこれを解決します。
Undo pending changes
)は私のために働いた。
どのように機能していないかの例なしでステートメントに応答するのは難しいですが、TFVC(TFS 2012より前のメカニズムであった「サーバーワークスペース」モード)がローカルファイルシステムの状態を調べないことを理解することが重要です。TFVCサーバーワークスペースは、「チェックアウト-編集-チェックイン」タイプのシステムであり、これは設計によるものであり、ワークスペースの状態を決定するために必要なファイルI / Oの量を大幅に削減するための意図的な決定です。代わりに、ワークスペース情報はサーバーに保存されます。
これにより、TFVCサーバーワークスペースを非常に効率的に非常に大規模なコードベースにスケーリングできます。マルチギガバイトのコードベース(Visual StudioやWindowsソースツリーなど)を使用している場合、クライアントはローカルファイルシステムをスキャンして、変更された可能性のあるファイルを探す必要はありません。TFSとの契約により、編集したいファイルを明示的にチェックアウトします。
ファイルを書き込み専用としてマークしないで、最初に明示的にチェックアウトせずにファイルを変更する必要があります。このルートをたどると、サーバーはファイルに変更が加えられたことを認識せず、「最新を取得」操作を実行してもローカルワークスペースは更新されません。変更。
このメカニズムを無効にする場合は、tfpt reconcile
コマンドを使用して、ローカルで行った変更についてローカルワークスペースを調べることができます。
「特定のバージョンを取得」を使用していて、「強制」オプションと「上書き」オプションを選択している場合は、TFSが実施しているすべての強制をバイパスして、怪我をさせないようにしている可能性が非常に高いです。おそらく、TFVCローカルワークスペースを検討する必要があります。
TFVCローカルワークスペースは、あなたがいることを意味バージョン管理システムの「編集・マージコミット」タイプを提供していない、明示的にそれらを編集する前にファイルをチェックアウトする必要があり、それらがされていない読み取り専用にディスクを。代わりに、ファイルを編集するだけで、クライアントはファイルシステムをスキャンし、変更を確認して、保留中の変更として提示します。
TFVCローカルワークスペースは、より優れたワークフローを提供するため、きめ細かな権限制御を必要としない小規模なプロジェクトに推奨されます。オンラインである必要はなく、ファイルを編集する前に明示的にチェックアウトする必要もありません。
TFVCローカルワークスペースはTFS 2012のデフォルトであり、有効になっていない場合は、サーバー管理者に問い合わせてください。(コードベースが非常に大きい組織や監査要件が厳しい組織では、TFVCローカルワークスペースが無効になる場合があります。)
Eric Sinkの優れた著書 『Version Control By Example』には、checkout-edit-checkinシステムとedit-merge-commitシステムの違い、およびどちらが適切かについて概説されています。
プロフェッショナルTeam Foundation Serverの2013本もTFVC ServerのワークスペースとTFVCローカルワークスペースの違いについて優れた情報を提供します。MSDNのドキュメントとブログにも詳細情報が記載されています。
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は、ファイル内にローカルコピーがある場合でも、ローカルコピーがないと見なし、すべてを再度同期します。
注意:この方法は自己責任で使用してください。重要な作業には使用しないでください。
残念ながら、TFS 2008には1つ以上のバグが存在する必要があります。これは、この問題が開発者のマシンで頻繁に発生し、私が作業しているサーバーも構築するためです。
最新の取得を実行できます。プロジェクトの履歴リストで、最新の取得を最後に実行した後にコミットがあったことを確認できます。ディスク上のファイルには一切触れていませんが、「最新の取得」機能を実行した後完了しました。TFSタブを確認すると、一部のファイルにはまだ最新バージョンではないことが記載されています。
リストがそう言っているので、明らかにTFSはローカルに古いファイルがあると判断できます。それでも、Get Latestはこれに失敗し、最新バージョンを取得します。私があなたがしたことをした場合、特定のバージョンを取得を使用し、ダイアログの下部にある2つのチェックボックスをオンにすると、ファイルが取得されます。
代わりに常にGet Specificバージョンタイプの関数を使用するようにビルドサーバーを変更したため、この部分は機能しますが、ビルドサーバー(TeamCity)も、ビルドを開始するためにファイルに変更があったかどうかの確認に依存しています、「何も変更されず、ここで何も表示されない」というモードに陥り、ビルド構成を強制的に実行するまで何もしない場合があります。
手動で両方の最新のビルドを取得することを除いて、触れられていないマシンでこの問題が発生したことに注意してください。したがって、ファイルを改ざんすることはありません。TFSが混乱するだけです。
これにより、ディスク上のファイルが以前に取得したバージョンとまったく同じバイナリであることを確認したため、ファイルを手動で改ざんしていませんでした。
また、実際に内容を見ることなく、ファイルがディスク上で変更されたかどうかをTFSがどのように「認識する」かを確認できません。TFSの一部がファイルが実際に最新バージョンではないことを確認できる場合、最新バージョンの取得は絶対に最新バージョンを取得できるはずです。これは、他の回答へのコメントを参照してください。
同じユーザーとしてTFSにログインしていて、ワークスペース名(デフォルトではマシン名に基づく)も同じであるため、TFSは同じマシンと同じワークスペースにいると見なし、すでに最新バージョンのファイルなので、取得されません。
マシンの名前を変更して、新しいワークスペースを新しいマシンとして作成してください。
Get Latestが期待どおりの動作をしないという開発者の不満のほとんどは、ソースコントロールエクスプローラーではなくソリューションエクスプローラーからGet Latestを実行しているためです。ソリューションエクスプローラーは、ソリューションの一部であるファイルのみを取得し、ソリューション内のファイル、したがってソース管理の一部が必要とする可能性があるものはすべて無視しますが、ソース管理エクスプローラーは、ローカルワークスペースをサーバー上のリポジトリーと比較して、どのファイルを特定します必要です。
TFSを追加したいだけMSBuildはフォルダーの特殊文字、つまり "@"をサポートしていません
過去に、External @ Project1という名前のプロジェクトフォルダーの1つが
カスタムmsbuildファイルを実行するTFSビルド定義を作成した場合、ワークスペースの最新取得中にワークスペースフォルダーのExternal @ Project1フォルダーにコンテンツが取得されません。tfs getは失敗しているようですが、エラーは表示されません。
試行錯誤を繰り返し、フォルダーの名前を_Project1に変更します。できれば、フォルダー(_Project1)にファイルを取得しました。
ツール: TFS Power Tools
出典: http : //dennymichael.net/2013/03/19/tfs-scorch/
コマンド: tfpt scorch / recursive / deletes C:\ LocationOfWorkspaceOrFolder
これにより、ファイルのリストを削除またはダウンロードするかどうかを尋ねるダイアログボックスが表示されます。それに応じてファイルを選択または選択解除し、[OK]を押します。グリッドでの外観(CheckBox、FileName、FileAction、FilePath)
原因: TFSはワークスペース内のアイテムとのみ比較します。ワークスペース外で変更が行われた場合、TFSはそれらを認識しません。
うまくいけば、誰かがこれが便利だと感じます。さまざまな場所にあるいくつかのフォルダを削除した後で、この投稿を見つけました。削除したフォルダを覚えていなかったため、使用していた通常の強制取得/置換オプションが除外されました。