按照最近修改日期(git)以人类可读的格式列出文件列表

4
假设我们在一个git仓库中有几个文件夹和文件。我希望获得仓库中所有文件及其最近修改时间戳的人类可读格式列表。
该列表应该按照修改时间戳排序
对此有什么想法吗?
我假设可以使用git ls-files来解决这个问题,但还没有找到一个好的方法来解决这个问题。
简单问题:
假设我们只想对仓库中给定目录下当前分支上的文件执行相同操作。

一些相关的线程和解决方案:


这将是一些非常直接的awk操作,例如git log --name-only --pretty=%x0a%cD - jthill
1个回答

1

要求列出仓库中的所有文件是雄心勃勃的。是从所有引用或仅从HEAD或仅从一个或多个特定分支可达的所有文件?为了简化,我假设它是HEAD。

git log HEAD --pretty="/invert:%h" --name-only | grep -v -E "^\/invert:|^$" | sort -u | while read path;do echo $(git log -1 --pretty="%ad %h" --date=format:"%Y-%m-%d %H:%M:%S" -- "$path") $path;done | sort -u

"

%ad是作者日期。如果需要提交日期,请使用%cd。HEAD可以是另一个分支或引用或修订范围。

如果是所有引用,请尝试使用

"
git rev-list --all | xargs -i git log -1 {} --name-only --pretty="/invert:%h" | grep -v -E "^\/invert:|^$" | sort -u | while read path;do echo $(git log -1 --pretty="%ad %h" --date=format:"%Y-%m-%d %H:%M:%S" -- "$path") $path;done | sort -u

如果需要所有分支,尝试使用git rev-list --branches。如果只需要特定的分支,可以使用git rev-list --branches=<pattern>
更新:另一种获取更改文件的方法是git diff <commit>^ <commit> --name-only

感谢@ElpieKay。非常有帮助。我稍微简化了原来的问题。事实上,我认为“更简单的问题”才是最有用的。 - Amelio Vazquez-Reina

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接