git commit的--date参数的格式是什么

v01*_*dya 66 git command-line-arguments

我需要覆盖git提交的日期,所有文档都指向--date参数,但是然后留下一个没有线索到适当的格式.我已经尝试了我能想到的每一个排列,并且我得到了"致命:无效的日期格式:"每个人的错误.

Von*_*onC 68

Git 2.6 +(2015年第3季度)添加了一个新选项.

请参阅提交e4f031e(2015年6月30日),并提交aa1462c,提交a5481a6,提交b7c1e11(2015年6月25日)作者:Jeff King(peff).
(由Junio C gitsterHamano合并- -提交d939af1,2015年8月3日)

介绍"格式"日期模式

这直接将格式提供给strftime.
除了更灵活一点之外,主要优点是您的系统 strftime可能更了解您的语言环境的首选格式(例如,如何拼写一周中的几天).

--date=format:...将格式提供...给您的系统strftime.
用于--date=format:%c以系统区域设置的首选格式显示日期.
有关strftime格式占位符的完整列表,请参阅手册.

Davide Cavestro 在评论中提出一个例子:

git commit -m "Test" --date=format:relative:5.hours.ago 
Run Code Online (Sandbox Code Playgroud)

原始答案(2014年中)

--date选项(在2009年12月的提交02b47cd中为git1.7.0引入)使用GIT_AUTHOR_DATE与在commit 96b2d4f中测试的日期格式相同的格式:

在那里你可以看到接受的各种格式:

  • RFC2822: Mon, 3 Jul 2006 17:18:43 +0200
  • ISO8601: 2006-07-03 17:18:43 +0200
  • 本地: Mon Jul 3 15:18:43 2006
  • 简短:( 2006-07-03不是1.9.1,适用于2.3.0)
  • relative:参见commit 34dc6e7:

    5.seconds.ago, 
    2.years.3.months.ago, 
    '6am yesterday'
    
    Run Code Online (Sandbox Code Playgroud)
  • raw:参见commit 7dff9b3(git 1.6.2,2009年3月)
    内部原始git格式 - 自epoch加时区后的秒数
    (换句话说:' date +"%s %z"'格式)

  • 默认: Mon Jul 3 17:18:43 2006 +0200

ADTC 在评论中提出并回答:

本地接受2006-07-03 15:18:43吗?

是的它确实有效,它会自动获取本地时区.
与该格式我不需要理会它是一周中的哪一天(Sun,Mon,等).


Dmy*_*huk 12

简单的例子:

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'
Run Code Online (Sandbox Code Playgroud)

  • 使用环境变量似乎是设置提交日期的唯一方法。没有参数选项。 (3认同)

Cir*_*四事件 8

日期格式未在Documentation/date-formats.txt(man git commit)中记录,并且非常"人性地"解析.

唯一有效的方法是在date.c下读取源代码并尝试它.

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^55TODO 附近的某处?)作为1970,即使git cat-file -p HEAD显示正确的数字被存储,所以它似乎是日期转换的限制.

    对于任何大于2**63 - 1,大的正面签名长,试图推向GitHub失败date causes integer overflow.那天在GitHub上的提交(由于某种原因, GitHub 无法显示真正的大日期)

    VonC指出这是一个耻辱,因为它阻止负面日期是否有可能设置一个git提交在1970年之前有一个时间戳?可用于将旧软件迁移到Git.

  • tea:今天17点:-)

  • @VonC:很好的链接.我不认为版本控制存在于60年代/​​ 70年代http://programmers.stackexchange.com/questions/184695/when-was-source-control-invented和文本自-3200年以来.如果他们想将hammurabi的代码迁移到Git怎么办?:-)(啊,刚发现有人已经这样做了:https://github.com/elia/hammurabi/blob/master/lib/hammurabi/code.txt,但丢失了时间戳) (3认同)