2012-03-20 30 views
0

使用posh-git在PowerShell中我可以通過使用集合變量$ GitStatus列出工作樹中已更改的所有項目。工作,我可以然而,當使用此列表在where子句來過濾目錄,像這樣

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

這個作品真的很好地顯示了在指數改變,但還不是當前目錄下的所有文件列表,我用-recurse指令運行這個相同的命令,這個文件不再匹配。我不明白爲什麼。有任何想法嗎?

(注辣妹-GiTDir從同樣的問題Scott Hanselman遭罪,這並不奇怪,因爲他基本上採用相同的技術,展現了「混帳」欄)

編輯:這開始時,我注意到Posh-當我做遞歸目錄列表時,GitDir Git列沒有顯示任何內容。能夠快速查看「從這個文件夾中刪除了哪些內容」是很有用的,我查看了Posh-GitDir如何獲取其信息以嘗試調試爲什麼它不適用於遞歸。

回答

1

那是因爲你正在使用$_.Name,但是當你做git status,這是$GitStatus會給你從辣妹,Git的,它會給目錄和文件名。所以當你只考慮目前的文件夾(dir沒有-recurse)它找到了,因爲它只會是名字。但是當你考慮目錄中的文件時,它們將是相互關聯的路徑並且將不匹配$_.name

而btw,$GitStatus.Working被用來顯示repo中在工作目錄中但未被添加的文件。你爲什麼想獲得的所有文件的列表,並從$GitStatus.Working

與項目篩選,如果你想從$GitStatus.Working FileInfo對象,嘗試做:

$GitStatus.Working | gi 

編輯,以顯示基於最終的解決方案對這樣的回答:
所以我的目的,我所做的是....

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

(編輯編輯,以前的片段而不是C直接)

+0

這是我的第一個想法。然而,名稱字段似乎沒有相對的一個 - 遞歸(是的,我知道這是另一個問題,即潛在的誤報) – 2012-03-20 23:54:53

+0

@TimJarvis - 名稱屬性只是文件的名稱是,但$ GitStatus.Working會給你'path/file1',你會看到它是否有'file1'。所以它不會工作。 – manojlds 2012-03-20 23:58:13

+0

mmm,是。 :-)現在我很困惑爲什麼它在當前目錄中工作。在這種情況下,我正在比較路徑/文件與文件。當然都不應該工作。但是這只是一個路徑問題,因爲我剛剛注意到,如果我更改爲具有錯誤情況的目錄,那也會打破它。 (posh-gitdir也有這個問題) – 2012-03-21 00:21:07