我需要覆盖git提交的日期,所有文档都指向--date参数,但随后却不知道适当的格式。我已经尝试了我能想到的每个排列,并且每个错误都出现“致命的:无效的日期格式:”错误。
Answers:
Git 2.6+(2015年第三季度)添加了一个新选项。
请参阅Jeff King()的commit e4f031e(2015年6月30日)和commit aa1462c,commit a5481a6和commit b7c1e11(2015年6月25日)。(通过合并JUNIOÇ滨野- -在提交d939af1,2015年8月3日)peff
gitster
引入“格式”日期模式
这会将格式直接输入
strftime。
除了更加灵活之外,主要优点是您的系统strftime可能会更多地了解您的语言环境的首选格式(例如,如何拼写一周中的几天)。
--date=format:...将格式提供...给您的系统strftime。
用于--date=format:%c以系统区域设置的首选格式显示日期。
有关strftime格式占位符的完整列表,请参见手册。
达维德Cavestro提出的意见的例子:
git commit -m "Test" --date=format:relative:5.hours.ago
原始答案(2014年中)
该--date选项(于git1.7.0于2009年12月在commit 02b47cd中引入)使用与相同的格式GIT_AUTHOR_DATE,并且日期格式在commit 96b2d4f中进行了测试:
在这里,您可以看到接受的各种格式:
Mon, 3 Jul 2006 17:18:43 +02002006-07-03 17:18:43 +0200Mon Jul 3 15:18:43 20062006-07-03不在1.9.1中,在2.3.0中适用)相对的:请参见commit 34dc6e7:
5.seconds.ago,
2.years.3.months.ago,
'6am yesterday'
raw:参见commit 7dff9b3(git 1.6.2,2009年3月)
内部原始git格式-自纪元加上时区以来的秒数
(换句话说:' date +"%s %z"'格式)
Mon Jul 3 17:18:43 2006 +0200是否接受本地的2006-07-03 15:18:43?
是的,它确实可以工作,并且会自动采用本地时区。
与该格式我不需要理会它是一周中的哪一天(Sun,Mon,等)。
2006-07-03 15:18:43了当地?另外,相对格式和原始格式是什么?
日期格式在Documentation / date-formats.txt(man git commit)中记录不足,并且非常“人性化”地进行了解析。
VonC在2.3.0上未提及的要点:
仅根据位数来解析数字:
2位数字:19YY,表示YY> = 73,表示当前月份,日期和时间。错误或当前日期,否则。
4位数:YYYY,代表YYYY> = 1973,<= 2099
> 8位数字,上限为一个小限制(TODO哪个?):UNIX时间(自1970年以来的秒数)
@<digits> +0000:UNIX时间。
这似乎是直接输入UNIX时间的最佳方法。
2 ** 64-2(TODO为什么不为-1?)是不会导致提交错误的最大值。标记存储在C长中。
git log2^55即使git cat-file -p HEAD显示了正确的数字,也显示了非常大的值(在TODO处的某个地方?),直到1970年,所以这似乎是对日期转换的限制。
对于大于2**63 - 1最大正号的任何东西,尝试推送到GitHub都会失败date causes integer overflow。当时在GitHub上的提交(由于某种原因GitHub无法显示非常大的日期)
VonC指出这很可耻,因为它阻止了负面日期,是否可以将git commit设置为在1970年之前具有时间戳记?可以用来将较旧的软件迁移到Git。
tea:今天17小时:-)
简单的例子:
GIT_AUTHOR_DATE='2015-04-19 17:18:43 +0200' GIT_COMMITTER_DATE='2015-04-19 17:18:43 +0200' git commit -m 'Commit message'
下面的缩写形式都可以使用:
<month>/<day><month>-<day><day>.<month>如果没有歧义,即<day>大于12,则顺序<month> <day>无关紧要,并且分隔符可以是/',' -'或' .'中的任何一个。
否则,请使用' .'作为分隔符<day>.<month>,并使用' /'或' -'作为分隔符<month>-<day>。
因此,“ 1.7”将被视为“ 7月1日”,而“ 1/7”将被视为“ 1月7日”。
请参阅v1.3.0中的相关提交:
当分隔符为“。”时,我们更喜欢dd.mm.yyyy mm.dd.yyyy; 否则,mm / dd / yy [yy]优先于 dd / mm / yy [yy]。
这也适用于接受日期输入的其他命令,例如:自2月4日起显示日志:
git log --since 2/4