在进行git提交时使用将来的日期

时间:2015-04-28 18:45:11

标签: git github

有没有简单的方法推迟GitHub提交?

如果这些提交将在1小时内一个接一个地进行,那也很好 让我们说如果我有5个提交,第一个应该出现在上午10点,第二个出现在上午11点,第三个出现在下午12点,依此类推。

3 个答案:

答案 0 :(得分:16)

您可以使用commit --date参数:

git commit -m "message" --date "Tue Apr 28 23:00:00 2015 +0300"

UPD: 还有一个非常酷的脚本用于转移旧提交日期(你需要Perl来运行它): https://raw.githubusercontent.com/gitbits/git-shift/master/git-shift

perl git-shift +5h 2e6fd0a9dc98403c4fca638e411b3451cbc66a89

UPD2: 您可以创建自定义别名,以便自动转移所有新提交。为此,请将以下行放入〜/ .bashrc文件

alias future-commit='git commit --date "$(date -v +4H)"'

alias future-commit='git commit --date "$(date -d +4hours)"'

重新加载终端,现在你可以提交+4小时的班次:

future-commit -m "future commit"

答案 1 :(得分:13)

您可以使用

在任何日期和时间进行提交
GIT_AUTHOR_DATE='your date' GIT_COMMITTER_DATE='your date' git commit -m 'message'

'your date'的格式类似于Fri May 01 19:32:10 2015 -0400

请注意author and committer are different entities in git术语,因此需要设置两个时间戳(与其他注释和答案中提供的选项不同)。

通常,author_date是由github /在git log等中获取的,并且当您查看所有提交信息时,committer_date是可见的,如gitk中所示。如果单独更改author_date,请使用--date选项作为其他答案点。

答案 2 :(得分:0)

注意:如果您需要在非常遥远的未来推迟提交,Git 2.13.x / Git 2。14(2017年第3季度)将满足您的需求。

  

Git的源代码将时间戳称为无符号长整数   在32位平台以及Windows上,unsigned long不够大   捕捉未来的荒谬日期"。

     

当然,对于long数据,C标准完全有效   type是指32位整数。这就是time_t数据类型的原因   存在:即使long为32位,它也可以是64位   Git的源代码只是使用了不正确的数据类型来表示时间戳,全是。

请参阅commit 28f4aeecommit 1e65a98commit dddbad7(2017年4月26日),commit cb71f8bcommit 1aeb7e7(2017年4月21日)和commit efac8accommit a07fb05commit e467dc1(2017年4月20日)Johannes Schindelin (dscho)commit 3f78971查看Ramsay Jones (``)(2017年5月8日) (2017年5月16日Junio C Hamano -- gitster -- commit b15667b合并)

  

使用uintmax_t作为时间戳

     

以前,我们使用unsigned long作为时间戳。这只是一个好消息   Linux上的选择,我们隐含地知道unsigned long是什么   用于time_t

     

但是,我们希望为时间戳使用不同的数据类型,原因有两个:

     
      
  • 没有任何内容表明unsigned long应该与time_t的数据类型相同,事实上,例如,在64位Windows上,它不是:
      unsigned long为32位,time_t为64位。
  •   
  • 即使在32位Linux上,其中unsigned long(从而time_t)是32位,我们希望能够编码当前Git中的时间戳非常荒谬,即使系统库也无法将这些时间戳格式化为日期字符串。
  

因此,让我们只切换到可用的最大整数类型,如今所有实际目的应至少为64位。它当然不能比unsigned long更糟糕,所以......

这是基于commit dddbad7(此补丁的一部分):

  

timestamp_t:时间戳的新数据类型

     

Git的源代码假设无符号长度至少与之一样精确   time_t。这是不正确的,特别是导致很多问题   其中unsigned long只有32位(特别是在Windows上,即使在64位上也是如此)   的版本)。

     

因此,让我们使用更合适的数据类型   在筹备   为此,我们引入了新的timestamp_t数据类型。

     

由于我们将使用不一定与time_t相同的数据类型,   每当我们与之交互时,我们都需要非常小心地使用time_t   系统功能,以及timestamp_t其他任何地方。