我需要覆盖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 +0200
2006-07-03 17:18:43 +0200
Mon Jul 3 15:18:43 2006
2006-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 log
2^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