我在这个GitHub储存库上看到了这一点:



是什么意思?怎样才能“在7天前创作”而又在“ 14小时前提交”呢?

评论

git可以测量他编辑的文件与他实际提交和推送的时间之间的时间戳吗?我没有看到这种功能的用途,但这有点像措辞所暗示的。.

@Seth最初就是我的想法,但是我什至从未听说过Git会使用时间戳做任何事情。

@Seth Git忽略文件时间戳。提交者可以使用commit --date =即时更改作者时间戳。 Schwern很好地解释了它。

@Undo我希望您不要将“ 14小时前”与“ 14天前”混淆。...现在确实很奇怪,要提交一些似乎直到7天后才编写的东西……我m不确定Git是否阻止将作者时间戳设置为大于提交者时间戳;可能不在乎。

#1 楼

Git有一个单独的概念,即作者(编写代码的人)和提交者(将代码提交到存储库的人)。同样,两者的日期也可能不同。通常它们是相同的。

主要是因为编写代码或提交补丁的人员不像使用邮件列表邮寄补丁程序的项目那样具有对存储库的推送访问权限,您希望它们有所不同提交。在这种情况下,具有推送访问权限的人员将应用补丁并使用git commit--author开关或使用GIT_AUTHOR_NAME,GIT_AUTHOR_EMAIL和GIT_AUTHOR_DATE环境变量(在git-commit-tree中记录。另一种情况是使用--date或git rebase。提交者是执行樱桃精选的人,而作者是原始提交的作者。Git将为您设置作者身份和日期。

您可以使用git cherry-pick在存储库中查看此信息。

commit 21550561941b078ea1862b882ec89f26696ff5bb (HEAD, origin/master, origin/HEAD, master)
Author:     thiagopnts <thiagopnts@gmail.com>
AuthorDate: Tue Nov 18 14:52:49 2014 -0200
Commit:     Thiago Pontes <email@thiago.me>
CommitDate: Tue Nov 25 09:46:58 2014 -0200

    open repository url if confirmed, closes #1


评论


git rebase也会导致提交日期被更新,而作者日期保持不变。

– cjm
2014年11月26日17:27

@cjm你说得对!在这方面,rebase和cherry-pick的行为相同。这是有道理的,可以将一个rebase视为多个“樱桃”。

–施韦恩
2014年11月26日在18:59

为了从邮件中应用补丁,还有git am,它会自动从邮件中获取日期和作者。

– deltab
2014年11月26日20:50



#2 楼

这看起来像是Git如何处理日期以及如何使用GitHub的close关键字引用它的混合体。

Git在提交和作者日期之间进行分隔。在Pro Git中,它们有所不同:因此,如果您向项目发送补丁程序,并且其中一个核心成员应用了该补丁程序,那么你们俩都将获得荣誉-您作为作者,而核心成员作为提交者。 />因此,虽然代码本身是在“ 7天前”(本地)提交/编写的,但直到“ 14小时前”才被“应用”或修补到该代码,因为直到那时,它才在远程中看到参考关闭消息。

评论


虽然我还没有测试过,但我不相信作者信息是由Github封闭关键字添加的。提交者和作者的身份以及日期都包含在提交ID中。如果Github更改了其中任何一个,它将更改远程端的提交ID。远程存储库和本地存储库将有所不同。如果没有强迫,作者将无法推或拉。

–施韦恩
2014年11月26日8:21



提交与推送到远程不同。请记住,Git中的几乎所有内容都可以在本地完成,包括提交。您可以先提交(提供两个时间戳),然后再推送(仅将提交上传到远程,但不提供任何时间戳)。没有“推送时间戳”,因为知道何时推送提交并不重要-可以(并且经常)推送和拉取任意次。

– ADTC
2014年11月27日0:47