我试图找到命令来获取本地git仓库中文件的最后修改日期。
创建了repo并完成了一次提交。不得不编辑一个文件并将提交此文件但是想知道repo中文件的最后修改数据是什么(而不是提交日期)。
没有gui onl命令行。
git log ./path/to/filename.php
只给我提交日期
答案 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?”。
包括:
mtimestore
- 提供3个选项的核心脚本:
-a
(全部保存 - 用于现有仓库中的初始化(与git-versed文件一起使用)),-s
(保存暂存的更改)和-r
恢复它们。- pre-commit hook
- post-checkout hook
醇>
顺便说一下,这是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%准确。