0

powershell で posh-git を使用すると、変更された作業ツリー内のすべてのアイテムを一覧表示できます。コレクション変数 $GitStatus.Working を使用すると、このリストを where 句で使用して、ディレクトリの一覧を次のようにフィルター処理できます。

dir | where {$GitStatus.Working -contains $_.Name}

これは、現在のディレクトリ内で変更されているがまだインデックスに含まれていないすべてのファイルを表示するのに非常にうまく機能しますが、同じコマンドを -recurse ディレクティブで実行すると、ファイルが一致しなくなります。理由がわかりません。何か案は?

( Scott Hanselmanの Posh-GiTDirも同じ問題に苦しんでいることに注意してください。彼は基本的に同じ手法を使用して「Git」列を表示しているため、驚くことではありません)

編集:これは、再帰的なディレクトリの一覧表示を行ったときに Posh-GitDir Git 列に何も表示されないことに気付いたときに始まりました。「このフォルダーから」何が変更されたかをすばやく確認できると便利です。Posh-GitDir が情報を取得する方法を調べて、再帰で機能しなかった理由をデバッグしようとしました。

4

1 に答える 1

1

これは を使用しているためですが、$_.NamePosh -Git から得られる を使用すると、ディレクトリとファイル名が得られます。したがって、現在のフォルダーのみを (なしで) 検討している場合、それは名前のみになるため、うまくいきます。ただし、ディレクトリ内のファイルを考慮すると、それらは相対パスになり、一致しませんgit status$GitStatusdir-recurse$_.name

ところで、$GitStatus.Working作業ディレクトリにあるが追加されていないリポジトリ内のファイルを表示することがサポートされています。すべてのファイルのリストを取得して、次のアイテムでフィルタリングしようとしているのはなぜですか$GitStatus.Working

から FileInfo オブジェクトが必要な場合は、次のこと$GitStatus.Workingを試してください。

$GitStatus.Working | gi

この回答に基づいて最終的な解決策を表示するように編集しました:
したがって、私の目的のために、私がしたことは....

$working = $GitStatus.Working | gi | %{$_.FullName}
dir -recurse | where {$working -contains $_.FullName}

(編集を編集しました。前のスニペットは正しくありませんでした。)

于 2012-03-20T23:48:53.580 に答える