获取git目录中文件的最后修改日期

Posted

技术标签:

【中文标题】获取git目录中文件的最后修改日期【英文标题】:Get last modification dates of files in directory in git 【发布时间】:2021-12-07 05:01:56 【问题描述】:

我有一个装满文件的文件夹,我想获取每个文件的最后一次 git 更新的时间戳

我想让那些参与 Gradle 任务。

我用 GrGit 尝试了以下操作:

def git = org.ajoberstar.grgit.Grgit.open dir:project.rootDir

task showGit() 
    doFirst 
        file( "$project.rootDir/src/main/java/some/folder" ).listFiles().each f ->
            git.log( includes:[ 'HEAD' ], paths:[ f.name ] ).each
                println "$f.name -> Author: $it.author.name - Date: $it.date.format( 'dd.MM.yyyy HH:mm' )"
            
        
    

但它什么也没打印。

如果我像这样省略paths

task showGit() 
    doFirst 
         git.log( includes:[ 'HEAD' ] ).each
           println "Author: $it.author.name - Date: $it.date.format( 'dd.MM.yyyy HH:mm' )"
        
    

它打印整个目录的所有提交信息。

如何获取每个文件的时间戳?

【问题讨论】:

【参考方案1】:

事实证明这很容易。

受How to get the last commit date for a bunch of files in Git?启发,我整理了自己的 GrGit 任务:

def git = org.ajoberstar.grgit.Grgit.open dir:project.rootDir

task lastGitUpdated() 
    doFirst 
        int base = project.rootDir.toURI().toString().size()

        def dates = file( "$project.rootDir/src/main/java/some/dir" ).listFiles().collect
            git.log( includes:[ 'HEAD' ], paths:[ it.toURI().toString().substring( base ) ], maxCommits:1 )[ 0 ].date
        
    

它就像一个魅力!

唯一有点令人失望的是,一个目录上的任务大约需要 150 个文件,大约需要 2 分钟才能完成......

【讨论】:

以上是关于获取git目录中文件的最后修改日期的主要内容,如果未能解决你的问题,请参考以下文章

在Java中获取文件的最后修改日期

如何在文件系统中获取最后修改的日期和时间?

如何在Filesystem中获取最后修改日期和时间?

VBS获取指定目录下最新文件拷贝然后以当前日期命名

如何在 Go 中获取文件的最后访问日期和时间?

获取文件最后修改日期(资源管理器值不是 cmd 值)