在github中,如果您打开存储库,您将看到一个页面,其中显示了每个子目录和文件的最新提交和时间。
我可以通过git中的命令行执行此操作吗?
答案 0 :(得分:3)
感谢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
输出:
$ 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
答案 1 :(得分:2)
您无法在CWD中的所有条目的单个Git命令中执行此操作,但使用简单的bash脚本,您可以:
把
#!/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
printf "%-${MAXLEN}s -- %s\n" "$f" "$(git log --oneline -1 -- $f)"
done
在文件中并将其作为脚本运行,或通过运行
将其用作在线命令
直接在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 printf "%-${MAXLEN}s -- %s\n" "$f" "$(git log --oneline -1 -- $f)"; done
。
答案 2 :(得分:2)
在PowerShell中,您可以创建一个这样的脚本
git ls-tree --name-only HEAD | ForEach-Object {
Write-Host $_ "`t" (git log -1 --format="%cr`t%s" $_)
}
循环遍历当前目录中的所有文件,写出文件名,选项卡(反引号“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
GitHub结果实际上也包含了提交者,你也可以通过添加[%cn]
得到它:
Write-Host $_ "`t" (git log -1 --format="%cr`t%s`t[%cn]" $_)
上面的脚本不能很好地处理长文件名,因为它依赖于标签。这是一个脚本,它创建一个格式良好的表,其中每列完全符合它所需的宽度:
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