get the last modification data of a file in git repo

前端 未结 3 2073
没有蜡笔的小新
没有蜡笔的小新 2021-02-04 06:59

Im trying to find the command to get the last modified date of a file in a local git repo.

Created the repo and have done one commit. Had to edit one file and will commi

相关标签:
3条回答
  • 2021-02-04 07:14

    MitchellK's answer exactly fit my needs, setting my local files' last written times to what's in git. Here's a little C# LinqPad script to automate the process:

    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.");
      }
    }
    
    0 讨论(0)
  • 2021-02-04 07:18

    Git doesn't record the last modification date, only the commit/author dates for a all commit (which can include more than one file).

    You would need to run a script in order to amend a commit with the last modification date of a particular file (not very useful if said commit has more than one file in it).
    See an example at "Git: Change timestamp after pushing".

    Another option would be to record those timestamp in a separate file, and amend your commit that way: see "What's the equivalent of use-commit-times for git?".

    That includes:

    1. mtimestore - core script providing 3 options:
      • -a (save all - for initialization in already existing repo (works with git-versed files)),
      • -s (to save staged changes), and
      • -r to restore them.
    2. pre-commit hook
    3. post-checkout hook

    Incidentally, this is the post where I explained 5 years ago why Git doesn't record timestamps.

    0 讨论(0)
  • 2021-02-04 07:32

    The correct way to do this is to use git log as follows.

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

    -1 restricts it to the very last time the file changed

    %ci is just one of the date formats you can choose from others here at https://git-scm.com/docs/pretty-formats

    This method is fool proof and 100% accurate.

    0 讨论(0)
提交回复
热议问题