我试图找到命令以获取本地git存储库中文件的最后修改日期。
创建了仓库,并完成了一次提交。不得不编辑一个文件并将提交此文件,但想知道存储库中文件的最后修改数据是什么(不是提交日期)。
没有gui onl命令行。
git log ./path/to/filename.php
Run Code Online (Sandbox Code Playgroud)
只给我提交日期
正确的方法是如下使用git log。
git log -1 --pretty="format:%ci" /path/to/repo/anyfile.any)
-1将其限制为文件更改的最后一次
%ci只是日期格式之一,您可以在https://git-scm.com/docs/pretty-formats上从中选择其他日期格式
这种方法非常简单,而且100%准确。
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)
获取最后修改的时间戳
git log -1 --pretty="format:%ct" /path/to/repo/anyfile.any)
Run Code Online (Sandbox Code Playgroud)
Git 不记录最后修改日期,只记录所有提交(可以包括多个文件)的提交/作者日期。
您需要运行一个脚本才能使用特定文件的最后修改日期修改提交(如果所述提交包含多个文件,则不是很有用)。请参阅“ Git:推送后更改时间戳
”
中的示例。
另一种选择是将这些时间戳记录在单独的文件中,并以这种方式修改您的提交:请参阅“ What's the equal to use-commit-times for git? ”。
包括了:
mtimestore- 核心脚本提供 3 个选项:
-a(保存全部 - 用于在现有存储库中进行初始化(适用于熟悉 git 的文件)),-s(保存分阶段的更改),以及-r来恢复它们。- 预提交钩子
- 结账后挂钩
顺便说一句,这是我 5 年前解释为什么 Git 不记录时间戳的帖子。