English 中文(简体)
git提交-将时间戳设置为未来
原标题:
  • 时间:2008-12-15 01:24:11
  •  标签:

我需要使用Git进行一些提交,但我希望git-log中的时间戳是未来的。

我如何在git中进行提交,以便在git日志中注册一个未来时间戳?

最佳回答

你应该等一会儿。

你也可以这样做:

/tmp/x 604% env GIT_AUTHOR_DATE= Wed Dec 19 15:14:05 2029 -0800  git commit -m  future! 
[master]: created 6348548: "Future!"
 1 files changed, 1 insertions(+), 0 deletions(-)

/tmp/x 605% git log 

Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Dec 19 15:14:05 2029 -0800

    Future!

注意,有作者日期和提交日期,所以一定要设置正确的日期(或两个)。

问题回答

你可以更正提交,以2037年为例:

git commit --amend --date="Wed Feb 16 14:00 2037 +0100"

我也尝试了2038年,但是我得到了一个空值的日期。

如果您希望在将项目添加到Git时保留实际变更日期,可以通过以下方式实现

env GIT_AUTHOR_DATE="`ls -rt *.cpp|tail -1|xargs date -u -r`" git commit -m "Old sources retaining old change-dates of last changed
 file: `ls -rt *.cpp|tail -1`, actual commit date: `date`"

这会使用上一个更改的 *.cpp 文件的更改日期进行提交,并为实际提交日期提供一个好的说明性信息。

通过结合Hugo的答案(1)和在这里发现的信息(2),再加上一些sed,我得到了这个:

alias newest="find . -path ./.git -prune -o -type f -exec stat -c "%y %n"  {}  + | sort -r | head -1 | sed s# .*./ ##"
GIT_AUTHOR_DATE="$(newest | xargs date -u -r)" GIT_COMMITTER_DATE="$(newest | xargs date -u -r)" git commit -m "Old sources retaining old change-dates of last changed file: $(newest), actual commit date: $(date)"

主要区别在于此版本进行递归搜索,因此您可以在整个目录树中获得最新的文件 - 尽管它会有意跳过.git目录。

当然,您可能想在这里放弃其中一个日期变量,并且我正在使用相对较新的bash版本(4.2.37(1)-release),因此$()符号可能不适用于您(请改用反引号(`))。

如果您想用“未来”的日期修改提交,例如这个答案:

git commit --amend --date="Wed Feb 16 14:00 2037 +0100"
  • not use a date after 2016 (Git 2.18 or less)
  • use Git 2.19 (Q3 2018)

See commit 1820703 (21 Aug 2018) by Derrick Stolee (derrickstolee).
(Merged by Junio C Hamano -- gitster -- in commit 1392c5d, 27 Aug 2018)

commit: use timestamp_t for author_date_slab

The author_date_slab is used to store the author date of a commit when walking with the --author-date flag in rev-list or log.
This was added as an unsigned long in 81c6b38 ("log: --author-date-order", June 2013, Git 1.8.4-rc0)

由于在平台上unsigned long的位数不确定(例如在Linux上为64位,在Windows上为32位),因此在commit.c中对作者日期的大多数引用都转换为timestamp_t ,是在dddbad7(“timestamp_t:时间戳的新数据类型”,2017年4月,Git 2.14.0-rc0)中实现的。

However, the slab definition was missed, leading to a mismatch in the data types in Windows.
This would not reveal itself as a bug unless someone authors a commit after February 2106, but commits can store anything as their author date.





相关问题
热门标签