获取git repo中文件的最后修改数据

时间:2014-03-19 06:04:45

标签: git command-line

我试图找到命令来获取本地git仓库中文件的最后修改日期。

创建了repo并完成了一次提交。不得不编辑一个文件并将提交此文件但是想知道repo中文件的最后修改数据是什么(而不是提交日期)。

没有gui onl命令行。

git log ./path/to/filename.php

只给我提交日期

3 个答案:

答案 0 :(得分:3)

MitchellK的答案完全符合我的需求,将本地文件的上次写入时间设置为git中的值。这是一个用于自动化处理的C#LinqPad脚本:

var root = new DirectoryInfo(@"C:\gitlab\mydirectory\");

Directory.SetCurrentDirectory(root.FullName); // Give git some context

var files = root.GetFiles("*.*", SearchOption.AllDirectories);

foreach (var file in files)
{
  var results = Util.Cmd("git", 
                         $"log -1 --pretty=\"format:%ci\" \"{file.FullName}\"",
                         true);
  
  var lastUpdatedString = results.FirstOrDefault();
  if (lastUpdatedString == null)
  {
    Console.WriteLine($"{file.FullName} did not have a last updated date!!");
    continue;
  }
  
  var dt = DateTimeOffset.Parse(lastUpdatedString);
  if (file.LastWriteTimeUtc != dt.UtcDateTime)
  {
    Console.WriteLine($"{file.FullName}, {file.LastWriteTimeUtc} => {dt.UtcDateTime}");
    file.LastWriteTimeUtc = dt.UtcDateTime;
  }
  else
  {
    Console.WriteLine($"{file.FullName} already updated.");
  }
}

答案 1 :(得分:0)

Git不记录最后修改日期,只记录全部提交的提交/作者日期(可以包含多个文件)。

您需要运行一个脚本才能修改具有特定文件的最后修改日期的提交(如果所述提交中包含多个文件,则不是非常有用)。
请参阅“Git: Change timestamp after pushing”的示例。

另一种选择是将这些时间戳记录在一个单独的文件中,并以这种方式修改你的提交:参见“What's the equivalent of use-commit-times for git?”。

包括:

  
      
  1. mtimestore - 提供3个选项的核心脚本:      
        
    • -a(全部保存 - 用于现有仓库中的初始化(与git-versed文件一起使用)),
    •   
    • -s(保存暂存的更改)和
    •   
    • -r恢复它们。
    •   
  2.   
  3. pre-commit hook
  4.   
  5. post-checkout hook
  6.   

顺便说一下,这是the post where I explained 5 years ago为什么Git不记录时间戳。

答案 2 :(得分:0)

正确的方法是使用git log,如下所示。

git log -1 --pretty="format:%ci" /path/to/repo/anyfile.any)

-1将其限制为文件更改的最后一次

%ci只是您可以在https://git-scm.com/docs/pretty-formats

上从其他日期格式中选择的一种日期格式。

此方法非常简单,而且100%准确。