web-dev-qa-db-ja.com

ファイルの移動はTFS2013で履歴を失います

TFS 2013 Update4でVS2013Update 4を使用しています。ソース管理エクスプローラーで、ファイルをあるフォルダーから別のフォルダーに移動するたびに、ファイルの履歴が新しい場所に保存されていることがわかります。ただし、保留中の変更をチェックインすると、その履歴は失われます。 「tfmove」コマンドを実行しようとすると、同じことが起こります。では、TFSでファイルを移動し、ファイルの履歴を保持するにはどうすればよいでしょうか。

13
TDN

ファイルの名前が正しく変更されると、履歴は「Gone」ではなく、代わりに「古い名前」に関連付けられます。正しい方法で行われる名前変更(削除+追加ではなく名前変更として追跡される)には、「古い」履歴を表示するためのドリルダウンオプションがあります。

enter image description here

  • チェンジセット81〜82には、古い名前への変更が含まれています
  • チェンジセット83には、削除と名前の変更が含まれています
  • チェンジセット84名前の変更後にチェックインされた新しい変更

ソース管理エクスプローラーの外部(または非常に古いバージョンのソース管理エクスプローラー(VS 2008など)から)またはソリューションエクスプローラーの外部で名前の変更が行われると、変更は2つの個別のアクションとして検出されます。1つは削除と1つ追加。 [保留中の変更]ウィンドウを使用して、これらを名前変更に昇格させ、履歴を保持することができます。

enter image description here

コマンドラインでは、これは「tfrename」と「tfmove」を使用してのみ実行できます。標準の「mv」および「ren」コマンドを使用すると、履歴の保存に失敗します。

以下は、すべての異なる方法を使用し、現在のファイル名の履歴を確認することで履歴が保持されていることを明確に示す別の例です。

enter image description here

コメントで述べたように、履歴はアイテムの改訂を含むチームプロジェクトに保存されます。プロジェクト間で分岐/移動すると、履歴はこれらのプロジェクト全体に広がります。チームプロジェクトを削除すると、そのプロジェクトに蓄積されたすべての履歴が失われます。

22
jessehouwing

私はこれからこの問題に来ました 質問

この問題はTFS2010以降に存在し、名前を変更または移動したファイルだけでなく、名前を変更または移動したフォルダーにも問題があります。最悪の場合は、名前を変更したブランチを作成してから、フォルダーの履歴を確認することです。次に、名前変更変更セットのみが見つかります。

ここ このタスクに対するMSの反応を見ることができます。基本的に、彼らはそれが多くの仕事であり、歴史を遅くするので、彼らはそれをしていないと言います。

私はこの事実に耐えることができず、これに対する修正をプログラムしました。再帰的な履歴の選択はSPdbo.prc_QueryHistoryで行われます。SPを変更し、次の機能を追加しました。

  • (最後の256個のチェンジセットの通常の検索として再帰的に)
  • 次に、変更セットの一部が名前変更/移動操作を表しているかどうかを確認します
  • そのように再帰的に(ループ内で)、各名前変更/以前のItemIdへの移動に従い、この手順を繰り返します(ファイル/フォルダーの名前が複数回変更された場合)
  • 次に、以前のItemIdに対する以前のすべての変更セットも検索します(移動/名前変更によりItemIdが変更されます)
  • 新しく見つかったチェンジセットをチェンジセットのリストに追加し、行256で切り取ります

影響は履歴が遅くなりますが(特に、深いフォルダーツリーのルートで実行した場合)、問題は修正されます。そして、私は不完全なものよりもむしろ遅い歴史で生きています。

私が書いたSPを提供できますが、MSで保護されたコードが含まれているため、ここで公開できるかどうかはわかりません(もちろん、修正を保証することはできません)。システムを更新しても持続します。-TFS2013SP3でSP)を記述しました。)

更新:修正を公開する許可をMSに要求しました(投稿の2番目のリンク)

2
Florian Boeck

私のtf moveの経験を見つけてください

TFSにはmainブランチがありました。 mainと同じ階層レベルでmain-restを作成しました。次に、main-restを別のサブフォルダーに移動しようとしました(実験的なブランチを$ルートからサブフォラーに移動するため)。

ローカルフォルダのマッピングを削除して実行しました

tf move $/projectName/main-rest $/projectName/experimental/main-rest

このコマンドは、ブランチ内のすべてのファイルを出力にリストしました。次に、変更をコミットしました。

見た目は問題ありませんが、*ブランチフォルダの履歴はもうありません*マージはマージする変更セットを認識しません

移動する前に、main-restからmainブランチにマージする可能性がありました。引き続き使用できますが、マージ時に選択するチェンジセットはありません。

「選択したチェンジセットのみをマージ」オプションには、「移動した」チェンジセットが1つだけあります。これは、main-restexperimentalサブフォルダーに移動された後に発生しました。

master-restブランチ全体をマージできることを願っています(ただし、テストするのに適切なタイミングではありません)

VS2017に同梱されているtf.exeコマンドラインユーティリティを使用しました(本日利用可能な最新のアップデートがパッチされています)。ソースコードはクラウドtfsでホストされています( https://dev.Azure.com

よろしく

0
oleksa

Jessehouwingの修正はフォルダでは機能しないと思います。実際、VS 2012+のソース管理エクスプローラーを使用している場合、フォルダーの移動はファイルの履歴を保持しますが(VSでは再帰的に表示されます)、フォルダーの場合は保持されません。フォルダの履歴はフラットです。

この問題の解決策:

  1. Microsoftは、VSでのフォルダー履歴の表示方法を修正するか、[再帰履歴の表示]コンテキストメニュー項目を追加します。
  2. すべてのチェンジセットを1つのフォルダーから別のフォルダーに移行します。残念ながら、TFS2013またはVSOでこれを実行できるツールをまだ特定できません。
0
vezenkov