4.4 思考:是谁完成的提交

在本章的一开始先为Git设置了全局配置变量user.name和user.email,如果不设置会有什么结果呢?

执行下面的命令,删除Git全局配置文件中关于user.name和user.email的设置:


$git config—unset—global user.name

$git config—unset—global user.email


这样一来,关于用户姓名和邮件的设置都被清空了,执行下面的命令将看不到输出。


$git config user.name

$git config user.email


下面再尝试一次提交,看看提交的过程会有什么不同,以及提交之后显示的提交者是谁?

在下面的命令中使用了—allow-empty参数,这是因为如果没有对工作区的文件进行任何修改,Git默认不会执行提交,使用—allow-empty参数后允许执行空白提交,操作如下:


$cd/path/to/my/workspace/demo

$git commit—allow-empty-m "who does commit?"

[master 252dc53]who does commit?

Committer:JiangXin<jiangxin@hp.moon.ossxp.com>

Your name and email address were configured automatically based

on your username and hostname.Please check that they are accurate.

You can suppress this message by setting them explicitly:

git config—global user.name "Your Name"

git config—global user.email you@example.com

If the identity used for this commit is wrong,you can fix it with:

git commit—amend—author='Your Name<you@example.com>'


喔,因为没有设置配置变量user.name和user.email,提交后输出乱得一塌糊涂。仔细看看上面的执行git commit命令后的输出,原来Git提供了详细的帮助来告诉我们如何设置必需的配置变量,以及如何修改之前提交中出现的错误的提交者信息。

如果此时查看版本库的提交日志,会看到有两次提交。

注意,下面的输出与你动手实践时得到的输出肯定有所不同,一方面因为提交时间会不一样,另外一方面因为由40位十六进制数字组成的提交ID也不可能一样。甚至,本书中凡是您亲自完成的提交,相关的40位魔幻般的数字ID也都会不一样(原因会在后面的章节中看到)。因此,凡是涉及数字ID和本书中的示例不一致的时候,以你自己的数字ID为准,本书提供的示例仅供参考,切记。


$git log—pretty=fuller

commit 252dc539b5b5f9683edd54849c8e0a246e88979c

Author:JiangXin<jiangxin@hp.moon.ossxp.com>

AuthorDate:Mon Nov 29 10:39:35 2010+0800

Commit:JiangXin<jiangxin@hp.moon.ossxp.com>

CommitDate:Mon Nov 29 10:39:35 2010+0800

who does commit?

commit 9e8a761ff9dd343a1380032884f488a2422c495a

Author:Jiang Xin<jiangxin@ossxp.com>

AuthorDate:Sun Nov 28 12:48:26 2010+0800

Commit:Jiang Xin<jiangxin@ossxp.com>

CommitDate:Sun Nov 28 12:48:26 2010+0800

initialized.


最早的提交(提交ID为9e8a761……),提交者的信息是由之前设置的配置变量user.name和user.email给出的。而最新的提交(提交ID为252dc53……)因为删除了user.name和user.email,提交时Git对提交者的用户名和邮件地址进行了大胆的猜测,这个猜测可能是错的。

为了保证提交时提交者和作者信息的正确性,需要重新恢复user.name和user.email的设置。记住,不要照抄照搬下面的命令,请使用您自己的用户名和邮件地址。


$git config—global user.name "Jiang Xin"

$git config—global user.email jiangxin@ossxp.com


然后执行下面的命令,重新修改最新的提交,改正作者和提交者的错误信息。


$git commit—amend—allow-empty—reset-author


说明:

参数—amend是对刚刚的提交进行修补,这样就可以改正前面的提交中错误的用户名和邮件地址,而不会产生另外的新提交。

参数—allow-empty使得空白提交被允许。之所以这里必须使用此参数是因为要进行的修补提交实际上是一个空白提交。

参数—reset-author的含义是将Author(提交者)的ID同步修改,否则只会影响提交者(Commit)的ID。使用此参数也会重置AuthorDate信息。

通过日志可以看到,最新提交的作者和提交者的信息已经改正了。


$git log—pretty=fuller

commit a0c641e92b10d8bcca1ed1bf84ca80340fdefee6

Author:Jiang Xin<jiangxin@ossxp.com>

AuthorDate:Mon Nov 29 11:00:06 2010+0800

Commit:Jiang Xin<jiangxin@ossxp.com>

CommitDate:Mon Nov 29 11:00:06 2010+0800

who does commit?

commit 9e8a761ff9dd343a1380032884f488a2422c495a

Author:Jiang Xin<jiangxin@ossxp.com>

AuthorDate:Sun Nov 28 12:48:26 2010+0800

Commit:Jiang Xin<jiangxin@ossxp.com>

CommitDate:Sun Nov 28 12:48:26 2010+0800

initialized.