【发布时间】:2021-04-27 12:38:15
【问题描述】:
我正在尝试创建一个报告文件,其中列出了我的 Git 存储库中的所有文件,其中包含以下列:
- 姓名
- 尺寸
- 上次修改时间
- Git 提交
前3个没问题:
gci -File -Recurse | Select-Object -Property @{
label = 'Size(KB)'
expr = { [string]::Format("{0:0.00}", $_.Length/1KB) }
}, LastWriteTime, FullName
但是,检索 git 提交需要运行 Git,一个本机命令。
我已经尝试过,其中包括:
gci -File -Recurse | Select-Object -Property @{
label = 'Git commit'
expr = { Invoke-Expression "git log -1 --format:format=`"%s`" -- $($_.FullName)" }
},
@{
label = 'Size(KB)'
expr = { [string]::Format("{0:0.00}", $_.Length/1KB) }
}, LastWriteTime, FullName
但它只是卡住了。
有人知道怎么做吗?
附: Git 的所有标志和选项都无关紧要,我只是复制了我已经做过的。
【问题讨论】:
-
选项
--format:format="%s"看起来不对;它应该是--format=format:"%s"。 (PowerShell 将删除",但这不应该有所作为。)因此,如果将Invoke-Expression命令替换为以下命令,它是否有效?git log -1 --format=format:"%s" -- $_.FullName -
现在你已经接受的答案暗示了这一点,但让我把它拼出来:
git选项有很大的不同,因为语法上无效的git命令只产生 stderr 输出,在计算属性的上下文中,它悄悄地丢弃,因此您最终会得到一个空的Git commit输出列。详情见我的回答。
标签: powershell