Github对Git commit date操作的诸多细节,你注意到了么

简介: 我们开发人员几乎每天都要使用git commit,但你知道他对时间处理的一些细节吗?一起来了解一下吧

git log是再常见不过的一个git命令,通常情况下他的标准输出格式如下:

commit [commit id]
Author: [user id] <[user email]>
Date: [commit date]

    [commit msg]

...

在进行commit操作时候,除了commit id以外,其余的信息都是可以用扩展参数修改的:

内容 参数 格式
Author --author --author="[user id] <[user email]>"
Date --date 格式丰富,参考文章详解git commit --date的参数格式
Message -m -m "[msg]"(必填项,但可以使用--allow-empty-message参数忽略必填要求)

格式丰富多样的Date便是本文的主题,使用--date参数马上就可以看到效果,无论在提交后的成功消息,还是在git log都可以看到已经是自己在--date参数指定的日期了,也许你会有这样的想法,如果我有一个repo的log是这样的:

  • 3月1日 初始化repo
  • 3月3日 添加文件

在3月4日,我提交一个--date指定为3月2日的commit会怎么样呢?其实不用想,git log不会按时间排序的,commits树对象结构上本身就是有序的,按照默认的存储循序,他会做如下显示:

  • 3月1日 初始化repo
  • 3月3日 添加文件
  • 3月2日 修改文件

当然对于托管网站来说,这是个值得讨论的问题,这也是我很多年前关心的一个事,可以在一个各路神仙云集的repo上,也就是 https://github.com/isaacs/github 上找到一个相关的issue,一直讨论这个log日期排序的问题,已经open了整整六年之旧,近两年还有人讨论(当然2013年开到现在还没关的issue也有三页多),至今尚未close,具体的link我就不放了,因为isaacs是值得所有前端开发人员尊敬的人物,在他的issue列表中找一找也是无可厚非,这是个玩笑。具体原因是这个issue的creator是一个典中之典的人,精神上疯疯癫癫的长期信邪教从最近的文字上看有些神志不清的样子,实在没法把包含他内容的link放我的文章,最重要的是很多与他相关的issue因为完全违背isaacs对这个repo讨论的原则要求而被close掉,那么基本的要求都做不到,可见真的宛若野人,完完全全可以isaacs的一段话形容他:

Trolling, disparaging remarks about GitHub, or even just unproductive kvetching

不过由于这个issue下面有很多人很好的解释了什么叫做procedural knowledge,想看可以慢慢找,说远了,话说回来push到Github后会发现还有另外一个问题,看到用--date指定日期后的commits,Gitlab的用户十分满意,Github的用户却犯了愁,这是为什么呢?

Github用户打开repo的Commits视图,发现经过修改的date提交到Github中心之后,发现Github并没有理会--date参数,而是使用了执行git commit命令时的时间,让人怀疑哪里出了问题,但回到自己Github个人中心的主界面,俨然发现在绿油油的contributions图,刚才的commit记录显示的却是--date指定的时间,这非常矛盾。而Gitlab用户并没有遇到这样的问题,他们在Gitlab任何界面看到关于经过修改--date后的那条commit的信息,都显示的是自己--date指定的时间。

原因是Git对commit的记录其实有两套日期,分别是AuthorDate和CommitDate,--date参数只修改了AuthorDate,而没有修改CommitDate,而且CommitDate是没有参数可以设定的,这两个时间都会被推送给远程,Github在commits视图使用的就是CommitDate,这让Github用户很懊恼,要早知道就好了,而且为什么别人Gitlab全都用AuthorDate呢?当然这些也没法细究了。

那么,git commit命令没有参数可以设置CommitDate,开发者们就真的无法修改CommitDate了吗?或者说只能修改git源码?其实并不是,这两个日期都有对应的环境变量,进行如下export即可:

#Commit Date
export GIT_COMMITTER_DATE="[date]"

#Author Date
export GIT_AUTHOR_DATE="[date]"

这下可以不用--date参数了,而且环境变量中设置日期的格式和 详解git commit --date的参数格式 一文提到的是一样的,export好环境变量之后就可以commit了,push后就可以在Github的commits界面看到自己设定的时间了。

使用Windows的开发人员应该注意,几乎可以说,有关git的一切环境变量,都应该在git-bash中乖乖的使用他们嫁接好的export命令,或者是用WSL,Cygwin等等的类Unix模拟终端。git-for-windows这个项目并没有真正的支持Windows的风格,在cmd中使用SET命令设置的环境变量,git基本是无视的。

目录
相关文章
|
12天前
|
网络安全 开发工具 git
解决fatal:remote error:You can’t push to git://github.com/username/*.g
通过上述诊断与修复步骤,绝大多数的推送错误都能得到有效解决,确保您的Git工作流顺畅无阻。
14 1
|
23天前
|
Unix Shell 网络安全
git学习六:(bug总结)git@github.com: Permission denied (publickey).等
本文是关于解决在使用Git和GitHub时遇到的“git@github.com: Permission denied (publickey)”错误的指南。文章提供了详细的步骤,包括确认SSH Agent运行状态、检查密钥配置、确保密钥匹配、验证仓库URL、检查权限和代理设置,以及配置SSH文件。这些步骤帮助用户诊断并解决SSH认证问题。
58 0
|
2月前
|
开发工具 git
GIT:如何合并已commit的信息并进行push操作
通过上述步骤,您可以有效地合并已提交的信息,并保持项目的提交历史整洁。记得在执行这些操作之前备份当前工作状态,以防万一。这样的做法不仅有助于项目维护,也能提升团队协作的效率。
129 4
|
2月前
|
开发工具 git
GIT:如何合并已commit的信息并进行push操作
通过上述步骤,您可以有效地合并已提交的信息,并保持项目的提交历史整洁。记得在执行这些操作之前备份当前工作状态,以防万一。这样的做法不仅有助于项目维护,也能提升团队协作的效率。
204 3
|
2月前
|
开发工具 git 开发者
掌握版本控制的艺术:Git 与 GitHub 的高效使用指南
在软件开发中,版本控制对于代码管理和团队协作至关重要。本文详细介绍了 Git 的核心概念与命令,包括初始化、创建仓库、文件跟踪、分支管理和远程仓库操作。同时,探讨了如何利用 GitHub 进行项目组织、代码审查及自动化工作流。通过遵循最佳实践,如频繁提交、清晰的信息记录和合理使用分支,开发者可以提升工作效率和团队协作能力,确保项目的持续成功。
|
2月前
|
Shell 网络安全 开发工具
Git,GitHub,Gitee&IDEA集成Git
Git提交项目到GitHub简洁版、版本控制、安装、常用命令、分支、团队协作机制、Github、Gitee远程仓库、IDEA集成Git、IDEA集成Github、IDEA集成Gitee
Git,GitHub,Gitee&IDEA集成Git
|
2月前
|
Shell 网络安全 开发工具
fatal: unable to access 'https://github.com/wolfcw/libfaketime.git/': Encountered end of file
fatal: unable to access 'https://github.com/wolfcw/libfaketime.git/': Encountered end of file
|
3月前
|
开发工具 git
Git——commit的提交规范
Git——commit的提交规范
99 4
|
3月前
|
测试技术 持续交付 开发工具
[译] 为何每次 Git Commit 要尽可能小?
[译] 为何每次 Git Commit 要尽可能小?
|
3月前
|
Java 开发工具 Android开发
Android Studio利用Build.gradle导入Git commit ID、Git Branch、User等版本信息
本文介绍了在Android Studio项目中通过修改`build.gradle`脚本来自动获取并添加Git的commit ID、branch名称和用户信息到BuildConfig类中,从而实现在编译时将这些版本信息加入到APK中的方法。
65 0