0

グーグルを数時間検索した後、私の質問に対する答えが見つかりました。この投稿Undo checkout TFSが私の質問に答えていることは知っていますが、すべての質問に答えているわけではありません。投稿が尋ねたのと同じ目的を達成したい。そのファイルで何も変更されていない場合に、チェックアウトされたファイルのみを元に戻す方法は? 私の質問への答えは、答えるのが難しすぎるべきではありません。

私がやっていることは、サーバーからファイルをコピーし、ローカル ワークスペースで上書きすることです。コピーされているすべてのファイルをチェックアウトしています。ただし、コピーされたファイルが変更されていない場合 (サーバー ファイルと宛先ファイルがまったく同じ)、そのファイルのチェックアウトを取り消したいと思います。

私はworkspace.Undo()メソッドを使用することを知っており、紳士はそれが彼のために働いたと言いました。しかし、彼はそれをどのように実装したかを示しませんでした。

リンクの助けを借りて私が持っているコードは次のとおりです。

public static void CheckOutFromTFS(string filepath)
{
    var workspaceInfo = Workstation.Current.GetLocalWorkspaceInfo(filepath);
    if (workspaceInfo == null)
    {
        return;
    }
    var server = new TfsTeamProjectCollection(workspaceInfo.ServerUri);
    var workspace = workspaceInfo.GetWorkspace(server);
    workspace.PendEdit(filepath);
}

与えられた答えは、workspace.Undo() メソッドを使用することでした。このメソッドを CheckOutFromTFS() の最後の行として追加しますか?

public static void CheckOutFromTFS(string filepath)
{
    var workspaceInfo = Workstation.Current.GetLocalWorkspaceInfo(filepath);
    if (workspaceInfo == null)
    {
        return;
    }
    var server = new TfsTeamProjectCollection(workspaceInfo.ServerUri);
    var workspace = workspaceInfo.GetWorkspace(server);
    workspace.PendEdit(filepath);
    workspace.Undo();
}

それとも別の方法で行われますか?この Undo() が変更がない場合にのみファイルを元に戻すのか、それともチェックアウトを完全に元に戻して PendEdit() を役に立たなくするだけなのかはわかりません。誰かが私のためにこれを明確にするのを助けることができますか?

4

3 に答える 3

0

ローカル ワークスペースを使用する場合、変更のないすべてのファイルは自動的にチェックアウトされていない状態に戻ります。何もする必要はありません。これは、VS 2012 以降と TFS 2012 以降で動作します。このように、最初にワークスペースをローカル ワークスペースに変換する必要があります

ここに画像の説明を入力

于 2015-03-02T21:28:22.520 に答える
0

そのため、さまざまな投稿で私の質問に対する答えを見つけました。私はちょっとした断片を取り、それらを組み合わせて私の実用的な解決策を得ました。ファイルパスを渡して Undo() 関数を使用すると、ファイルが変更されたかどうかに関係なく、実際にはファイルのチェックアウトが解除されます。私のワークスペースもローカルでしたが、VS と TFS はこれらの未変更のファイルを自動的に元に戻すことができなかったため、以下のアプローチを採用しました。

そこで、Team Foundation Power Tools の "uu" コマンドを使用して、ワークスペース内の変更されていないファイルへの変更を元に戻すことにしました。バッチ ファイルを作成し、次のコマンドを入力しました: echo y | tfpt uu . /noget /recursive. 実行中にシェルを表示しないので、「echo y」コマンドを使用して、「これらの冗長な保留中の変更を取り消しますか? (Y/N)」という質問に自動的に答えます。/noget を含めることを強くお勧めします。これにより、プロジェクトのすべてのファイルの強制的な「最新の取得」が行われ、総数によっては非常に長い時間がかかる可能性があるためです。

 var startInfo = new System.Diagnostics.ProcessStartInfo
 {
     WorkingDirectory = projectRoot,
     FileName = projectRoot + @"\undoUnchanged.bat",
     UseShellExecute = false,
     CreateNoWindow = true
 };
 Process process = Process.Start(startInfo);
 process.WaitForExit();
 process.Close();

スクリプトが実行され、process.Close() が実行された後、プロジェクトのチーム エクスプローラー ウィンドウの更新ボタンを押して、変更されていないファイルが実際にチェックアウトされていないかどうかを再確認します。他の誰かがこれで何らかの用途を見つけることを願っています。

于 2015-03-04T17:40:57.280 に答える