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

HMR*_*HMR 7 git command-line

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

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

没有gui onl命令行。

git log ./path/to/filename.php
Run Code Online (Sandbox Code Playgroud)

只给我提交日期

Mit*_*llK 8

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

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

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

%ci只是日期格式之一,您可以在https://git-scm.com/docs/pretty-formats上从中选择其他日期格式

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

  • 您当前的工作目录需要位于 git 存储库中,否则您会收到“致命:不是 git 存储库(或任何父目录):.git” (2认同)
  • @Boris 您也可以指定 `-C /some/git/dir` 来让 git 知道存储库所在的位置,而不是更改当前目录。 (2认同)

Dav*_*ers 6

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.");
  }
}
Run Code Online (Sandbox Code Playgroud)


Jož*_* Ws 6

获取最后修改的时间戳

git log -1 --pretty="format:%ct" /path/to/repo/anyfile.any)
Run Code Online (Sandbox Code Playgroud)


Von*_*onC 1

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

您需要运行一个脚本才能使用特定文件的最后修改日期修改提交(如果所述提交包含多个文件,则不是很有用)。请参阅“ Git:推送后更改时间戳
” 中的示例。

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

包括了:

  1. mtimestore- 核心脚本提供 3 个选项:
    • -a(保存全部 - 用于在现有存储库中进行初始化(适用于熟悉 git 的文件)),
    • -s(保存分阶段的更改),以及
    • -r来恢复它们。
  2. 预提交钩子
  3. 结账后挂钩

顺便说一句,这是我 5 年前解释为什么 Git 不记录时间戳的帖子。