感谢 Klas Mellbourn 和 Nevik Rehnel 的回答,最后我将这两个版本合并为我的:
#!/bin/bash
FILES=`ls -A`
MAXLEN=0
for f in $FILES; do
if [ ${#f} -gt $MAXLEN ]; then
MAXLEN=${#f}
fi
done
for f in $FILES; do
str=$(git log -1 --format="%cr [%cn] %s" $f)
printf "%-${MAXLEN}s -- %s\n" "$f" "$str"
done
Run Code Online (Sandbox Code Playgroud)
输出:
$ bash view.bash
android_webview -- 4 months ago [boxxx@chromium.org] Disable testCalledForIframeUnsupportedSchemeNavigations
ash -- 4 months ago [osxxxx@chromium.org] Rename _hot_ -> _hover_
cc -- 4 months ago [enxx@chromium.org] cc: Let impl-side painting use smaller tiles
chrome -- 5 weeks ago [Deqing] Set the nacl pipe to non-blocking
tools -- 10 weeks ago [Haxx Hx] Add submodule tools/gyp
Run Code Online (Sandbox Code Playgroud)
在 PowerShell 中你可以创建这样的脚本
git ls-tree --name-only HEAD | ForEach-Object {
Write-Host $_ "`t" (git log -1 --format="%cr`t%s" $_)
}
Run Code Online (Sandbox Code Playgroud)
这会循环遍历当前目录中的所有文件,写出文件名、制表符(反引号“t”),然后输出git log相对日期、制表符和提交消息。
示例输出:
subfolder 18 hours ago folder for miscellaneous stuff included
foo.txt 3 days ago foo is important
.gitignore 3 months ago gitignore added
Run Code Online (Sandbox Code Playgroud)
GitHub 结果实际上也包含提交者,您也可以通过添加以下内容来获取[%cn]:
Write-Host $_ "`t" (git log -1 --format="%cr`t%s`t[%cn]" $_)
Run Code Online (Sandbox Code Playgroud)
上面的脚本不能很好地处理长文件名,因为它依赖于制表符。这是一个创建格式良好的表格的脚本,其中每列的宽度与所需的宽度完全相同:
git ls-tree --name-only HEAD | ForEach-Object {
Write-Output ($_ + "|" + (git log -1 --format="%cr|%s" $_))
} | ForEach-Object {
New-Object PSObject -Property @{
Name = $_.Split('|')[0]
Time = $_.Split('|')[1]
Message = $_.Split('|')[2]
}
} | Format-Table -Auto -Property Name, Time, Message
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
931 次 |
| 最近记录: |