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


177

なぜTFSは常に最新の作業を一貫して取得しないのですか?

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

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

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


私が目にする最も愚かなことは、ローカルファイルが何らかの理由で削除された場合でも、「最新バージョンを取得」が何もしないことです。少なくともローカルファイルが存在することを確認することは、かなり明白なことだと思いました。しかし、なぜそれがサーバー上の各ファイルのタイムスタンプを、最後にgetを実行した時刻(ローカルのどこかに保存されているかもしれません)と比較できないのはなぜですか。
ディランニコルソン

これはコメントであるべきです。
Jimenemex

回答:


118

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

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

特定のバージョンを取得する唯一の方法は、特定のバージョンを取得し、[上書き...]ボックスを両方ともオンにすることです。


7
これは正しくありません。TFSの「最新を取得」は、TFSがファイルへの変更を認識している限り、宣伝されているとおりに機能します。最初にチェックアウトせずに、人々が外に出てIDEの外でファイルを変更したときにのみ、最新の「ねじ込み」を取得する 次に、TFSは、最新のソースがディスク上にあると見なし、それを取得しません。
Robaticus

18
@Robaticus tfsはどのように「最新情報」を実際に宣伝しますか。クリスが以前に活発に言ったように、彼と地球上の誰もが、「最新のものを取得する」ことは、tfsが行うことではない最新バージョンを取得することを理解しています。それを台無しにするためにtfs外のソースを編集する必要はありません。私は2つのワークステーションを持ち、互換性を持って動作しており、ソース同期を取得できません。最新バージョンを取得することはすでにtfsの面倒であり、マージがどのようになるのか想像できません。
Syaiful Nizam Yahya 2013

2
@publicENEMY、私は2台のマシンでtfsを使用していましたが、実際にはソース同期に問題があります。これには2人のtfsユーザーが必要になる場合があります...
kroiz

11
うわっ!これは苦痛です。Visual Studioは簡単にめちゃくちゃになる可能性があり、ファイルシステムで修正するのが最も簡単な方法です。Subversionのような他のソース管理システムにはWindowsエクスプローラーフックがあり、それとVS統合の両方が変更の監視により優れた働きをします。SVNが恋しい!
Dan Csharpster 2013

3
著者に同意します。「最新バージョンを取得」を「サーバーから最新バージョンを取得」と読みます(どこから取得しますか?)。VS2010では、最新バージョンの取得を実行し、最新バージョンがあることを通知しましたが、比較すると、ローカルと最新のサーバーエディションの違いが一覧表示されます。ローカルの作業を上書きしなくても大丈夫ですが、少なくともタイムスタンプの比較を行って、「最新バージョンを持っている」と誤解させないでください。ローカルバージョンを削除すると、最新バージョンの取得が期待どおりに機能しました。
Swanny

42

時には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)は私のために働いた。
RAM

本当に置き換えたいファイルの変更だけを元に戻し、作業中のすべてのものを
取り消さ

@Simon_Weaverおかげで私の問題は解決しましたが、なぜそれがまだ非常に煩わしいのかがわかります。
nulltron

12

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

これまで見てきたように、帯域幅の使用量がはるかに多いすべてを再評価するように強制できますが、動作はSourceSafeが以前に使用していた方法に近くなります。


11

どのように機能していないかの例なしでステートメントに応答するのは難しいですが、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のドキュメントとブログにも詳細情報が記載されています。


すばらしい、有益な答えですが、「ファイルを書き込み専用としてマークする」ことでOPに答えられるかどうかはわかりません。MVC .NETプロジェクトの* .csファイルにすべての変更を加えるためにVisual Studio(現在は2013)を使用していることを知っています。ラップトップを起動すると、「最新のものを取得」すると、多くの場合、問題が発生します。貨物の養殖がほぼ完了しました "詳細>>>特定取得>>>最新>>>上書き"。VSの外での編集やチェックインはありません。VSは、編集したファイルを見つけて、保留中の変更に適切に配置します。VSでチェックインします。「自分を傷つける」ようなことは何も見られませんが、最新版を取得しても確実に機能しません。??
ruffin

@ruffinあなたは最新のハングを取得すると言っていますか?それは私がOPの質問を解釈するものではありませんでした。終わりますか?他の操作は遅いですか、それとも単に取得ですか?Get w / Overwriteは遅いですか、それとも通常のGet Latestだけですか?
Edward Thomson

いいえ、ハングしません。私は最新のものを入手することができ、それは動作するように見えます(そして、かなり速く動作します)が、ファイルは変更されません。特定の>>>最新>>>上書きを実行すると、@ NotMeの提案と同様に、ファイルが「追いつきます」。赤いニシンの可能性:シェルフセットでも時折発生します。はい、私の作業パスは正しいです、またはGet Specificが機能しないと思います。
ruffin

ここには良い提案はありません。バグであると思われる長年の問題がある場合は、サポートにお問い合わせください。これがバグであるかどうかにかかわらず、この問題の解決策を取得する必要があります。
Edward Thomson、

6

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は、ファイル内にローカルコピーがある場合でも、ローカルコピーがないと見なし、すべてを再度同期します。

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


他に何もしなかったとき、これは私のために働きました。特定のバージョンを取得して両方のチェックボックスをオンにしてダウンロードを強制しましたが、ファイルが取得されませんでした。何かが腐っていたと思います。しかし、このソリューションは機能しました。
フランシスコダンコニア16年

3

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


3

残念ながら、TFS 2008には1つ以上のバグが存在する必要があります。これは、この問題が開発者のマシンで頻繁に発生し、私が作業しているサーバーも構築するためです。

最新の取得を実行できます。プロジェクトの履歴リストで、最新の取得を最後に実行した後にコミットがあったことを確認できます。ディスク上のファイルには一切触れていませんが、「最新の取得」機能を実行した後完了しました。TFSタブを確認すると、一部のファイルにはまだ最新バージョンではないことが記載されています。

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

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

手動で両方の最新のビルドを取得することを除いて、触れられていないマシンでこの問題が発生したことに注意してください。したがって、ファイルを改ざんすることはありません。TFSが混乱するだけです。

これにより、ディスク上のファイルが以前に取得したバージョンとまったく同じバイナリであることを確認したため、ファイルを手動で改ざんしていませんでした。

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


TFSは、ファイルのバージョン番号に依存して、「最新」のバージョンかどうかを確認します。その数はTFSで完全に維持され、誰かがチェックインしたときにのみ更新されます。したがって、「最新を取得」すると、TFSはデータベースをチェックして、最後に送信されたバージョンを確認します。この数が現在のバージョンと等しい場合は、最新のバージョンであると見なされます。ローカルファイルシステムの実際の内容に関係なく。アイデアは、ネットワークトラフィックを制限することでした。残念ながら、このモデルが機能する唯一の方法は、すべての編集がTFSの知識を持つアプリケーション内で行われる場合です。
NotMe

また、2005/08バージョンのこのバージョンには少なくとも1つのバグがあることに同意します。私はあなたが複数のマシンで説明した正確な問題を見てきました。これが、Get Specificバージョンを熱心に使用するようになった理由です。
NotMe

場合によっては、1つのマシンと他のマシンのVisual Studio内で完全に編集が行われ、最新のビルドを取得することのみが目的で、ローカルでの変更は行われません。それでも、なんとかこれを台無しにしています。控えめに言っても、TFSソース管理には感心しません。うまくいけば、2010年にはこれらの問題が少なくなるでしょう。
Lasse V. Karlsen、2010年

3

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

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


2

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

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

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


1

Get Latestが期待どおりの動作をしないという開発者の不満のほとんどは、ソースコントロールエクスプローラーではなくソリューションエクスプローラーからGet Latestを実行しているためです。ソリューションエクスプローラーは、ソリューションの一部であるファイルのみを取得し、ソリューション内のファイル、したがってソース管理の一部が必要とする可能性があるものはすべて無視しますが、ソース管理エクスプローラーは、ローカルワークスペースをサーバー上のリポジトリーと比較して、どのファイルを特定します必要です。


チームエクスプローラーから試しても、同じ結果が得られました。私の場合、フォルダを削除し、最新のコピーをもう一度取得したいが運が悪かった。
Hammad Khan

1
私はこの答えに同意しません。異なるソリューションで使用されているプロジェクトを共有している場合は、ソリューションエクスプローラーで行う必要あります。そうでない場合は、特定のTFSパスでGetを実行するだけです
Heliac

使用する予定がないのに、なぜソリューションエクスプローラーからオプションを追加するのですか?[すべてのファイルを表示]をクリックすると、ファイルはありましたが、プロジェクトには含まれていませんでした。私がそれを追加した人でもなかったので、奇妙です。
mokumaxCraig

1

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


1

同じアカウントを持つ2つの異なるマシンからTFSを使用すると、変更されたファイルを比較して確認し、最新の状態にしてから保留中の変更を元に戻し、チェックアウトを削除する必要があります。


1

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


0

TFSを追加したいだけMSBuildはフォルダーの特殊文字、つまり "@"をサポートしていません

過去に、External @ Project1という名前のプロジェクトフォルダーの1つが

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

試行錯誤を繰り返し、フォルダーの名前を_Project1に変更します。できれば、フォルダー(_Project1)にファイルを取得しました。


TFSかどうかにかかわらず、プロジェクトフォルダ名に特殊文字を使用しないでください。
Heliac 14

@は特別ではありません。また、%なども同様ではありません。このような文字が「通常の」文字とは異なる方法で処理されるのは、Microsoftの怠惰な部分です。
Kevin Whitefoot

0

ツール: 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

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

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

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


0

右クリックで進みます:[ 詳細 ] > [特定のバージョンを取得 ] 。「最新バージョン」を選択し、重要なことですが、2つのチェックをオンにします。 ここに画像の説明を入力してください

チェックは次のとおりです。チェックさ
れていない書き込み可能なファイルを上書きします。

ローカルバージョンが指定されたバージョンと一致していても、すべてのファイルを上書きする


スクリーンショットを投稿するのではなく、チェックする必要がある項目を説明してください。
チャックアダムス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.