GIT 作为不同的用户提交,没有电子邮件/或只有电子邮件

我试图提交一些改变作为一个不同的用户,但我没有一个有效的电子邮件地址,以下命令不适合我:

git commit --author="john doe" -m "some fix"
fatal: No existing author found with 'john doe'

我有同样的问题时,试图提交只有一个电子邮件地址

git commit --author="john@doe.com" -m "some fix"
fatal: No existing author found with 'john@doe.com'

在提交命令的 GIT 手册页上,它说我可以使用

standard A U Thor <author@example.com> format

用于—— author 选项。

这种格式在哪里定义? A 和 U 代表什么?我如何提交一个不同的用户只有一个用户名或只有一个电子邮件?

177356 次浏览

具体格式如下:

git commit --author="John Doe <john@doe.com>" -m "Impersonation is evil."

格式

A U Thor <author@example.com>

仅仅意味着您应该指定

FirstName MiddleName LastName <email@example.com>

看起来中间名和姓是可选的(也许 email 之前的部分根本没有严格的格式)。例如,试着这样做:

git commit --author="John <john@doe.com>" -m "some fix"

正如医生所说:

  --author=<author>
Override the commit author. Specify an explicit author using the standard
A U Thor <author@example.com> format. Otherwise <author> is assumed to
be a pattern and is used to search for an existing commit by that author
(i.e. rev-list --all -i --author=<author>); the commit author is then copied
from the first such commit found.

如果不使用这种格式,git 将提供的字符串视为一种模式,并尝试在其他提交的作者之间找到匹配的名称。

正如在 这么回答中所暗示的那样,所需的最小作者格式是

Name <email>

在你的情况下,这意味着你想写

git commit --author="Name <email>" -m "whatever"

根据 Willem D’Haeseleer 的评论,如果你没有电子邮件地址,你可以使用 <>:

git commit --author="Name <>" -m "whatever"

正如在您所链接的 git commit手册页上所写的,如果您提供的内容少于这个值,它将被用作搜索令牌,用于搜索以前的提交,查找该作者的其他提交。

那个

标准 A U Thor & lt; author@example.com & gt; format

似乎定义如下: (据我所知,绝对没有保修)

雷神 U = 必需的用户名

  • 字符 可能吧的分离表明允许使用空格,它也可以类似于首字母。
  • 用户名后面必须跟1个空格,多余的空格将被截断

(作者@example.com & gt; = 可选的电子邮件地址)

  • 必须总是在 < > 符号之间。
  • 电子邮件地址格式没有经过验证,你可以输入任何你想要的东西
  • 可选项,您可以使用 < > 显式地省略此项

如果您不使用这种确切的语法,git 将搜索现有的提交,并使用包含您提供的字符串的第一个提交。

例子:

  1. 只有用户名

    明确地省略电子邮件地址:

    git commit --author="John Doe <>" -m "Impersonation is evil."
    
  2. Only email

    Technically this isn't possible. You can however enter the email address as the username and explicitly omit the email address. This doesn't seem like it's very useful. I think it would make even more sense to extract the user name from the email address and then use that as the username. But if you have to:

    git commit --author="john@doe.com <>" -m "Impersonation is evil."
    

I ran in to this when trying to convert a repository from mercurial to git. I tested the commands on msysgit 1.7.10.

只是补充:

Git commit —— author = “ john@doe.com”-m“模仿是邪恶的。”

在某些情况下,提交仍然失败,并显示以下消息:

请告诉我你是谁。

快跑

Git config —— global user.email“ you@example.com” Git config —— global user.Name“ Your Name”

设置帐户的默认身份。 省略——仅在此存储库中设置标识的全局。

致命: 无法自动检测电子邮件地址(得到 xxxx)

所以只要运行“ git config”,然后运行“ git commit”

如果关心的是隐藏真正的电子邮件地址的 另一种选择... 如果你正在提交给 Github 你不需要一个真正的电子邮件,你可以使用 <username>@users.noreply.github.com

不管是否使用 Github,您可能首先想要更改 委员的详细信息(在 Windows 上使用 SET GIT_...)

GIT_COMMITTER_NAME='username'
GIT_COMMITTER_EMAIL='username@users.noreply.github.com'

然后设置作者

git commit --author="username <username@users.noreply.github.com>"

Https://help.github.com/articles/keeping-your-email-address-private

打开 Git Bash。

设置 Git 用户名:

$git config —— global user.name“ name family” 确认您已经正确设置了 Git 用户名:

$git config —— global user.name

姓氏家族

设置一个 Git 电子邮件:

$git config —— global user.email@foo.com 确认您已经正确设置了 Git 电子邮件:

$git config —— global user.email

电子邮件@foo.com

这完全取决于你如何承诺。

例如:

git commit -am "Some message"

将使用您的 ~\.gitconfig用户名。换句话说,如果你打开这个文件,你会看到一行如下:

[user]
email = someemail@gmail.com

这就是你想要更改的电子邮件。如果你通过 Bitbucket 或 Github 等做一个拉请求,你将是你登录的任何人。

--author选项并没有做正确的事情来避免 Git 人格之间的信息泄露: 它没有绕过读取调用用户的配置:

*** Please tell me who you are.


Run


git config --global user.email "you@example.com"
git config --global user.name "Your Name"

这个可以:

git -c user.name='A U Thor' -c user.email=author@example.com commit

为了分离工作和私有 Git 个性,Git 2.13支持 目录特定配置: 您不再需要包装 Git 并自己修改它来获得它。

git -c "user.name=\{\{ name }}" -c "user.email=\{\{ email }}" commit -m "\{\{ message }}"

其中\{\{}表示您放置了值