148

我正在尝试以其他用户身份提交一些更改,但我没有有效的电子邮件地址,以下命令对我不起作用:

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 代表什么?我如何为只有用户名或只有电子邮件的不同用户提交?

4

9 回答 9

173

如this SO answer中所暗示的,所需的最低作者格式是

Name <email>

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

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

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

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

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

于 2012-07-20T12:48:38.213 回答
63

具体格式为:

git commit --author="John Doe <john@doe.com>" -m "Impersonation is evil." 
于 2012-07-20T12:45:57.003 回答
43

标准AU Thor <author@example.com> 格式

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

AU Thor =必填用户名

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

<author@example.com> =可选电子邮件地址

  • 必须始终位于 < > 符号之间。
  • 电子邮件地址格式未经过验证,您几乎可以输入任何您想要的内容
  • 可选,您可以使用 <> 显式省略它

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

例子:

  1. 只有用户名

    明确省略电子邮件地址:

    git commit --author="John Doe <>" -m "Impersonation is evil."
    
  2. 只有电子邮件

    从技术上讲,这是不可能的。但是,您可以输入电子邮件地址作为用户名并明确省略电子邮件地址。这似乎不是很有用。我认为从电子邮件地址中提取用户名然后将其用作用户名会更有意义。但如果你必须:

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

我在尝试将存储库从 mercurial 转换为 git 时遇到了这个问题。我在 msysgit 1.7.10 上测试了这些命令。

于 2012-07-23T12:01:37.540 回答
20

为了不泄漏您的 git 个性之间的信息,该--author选项没有做正确的事情:它不会绕过读取调用用户的配置:

*** 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 并自己破解它来获得它。

于 2020-03-28T10:46:52.373 回答
13

补充一下:</p>

git commit --author="john@doe.com " -m "冒充是邪恶的。"

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

*** 请告诉我你是谁。

git config --global user.email "you@example.com" git config --global user.name "你的名字"

设置您帐户的默认身份。省略 --global 以仅在此存储库中设置身份。

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

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

于 2013-06-14T02:09:58.913 回答
8

格式

A U Thor <author@example.com>

只是意味着你应该指定

FirstName MiddleName LastName <email@example.com>

看起来中间名和姓氏是可选的(也许电子邮件之前的部分根本没有严格的格式)。例如,试试这个:

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 会将提供的字符串视为一种模式,并尝试在其他提交的作者中找到匹配的名称。

于 2012-07-20T12:46:56.317 回答
2

打开 Git Bash。

设置一个 Git 用户名:

$ git config --global user.name "name family" 确认你已经正确设置了 Git 用户名:

$ git config --global 用户名

姓氏

设置一个 Git 电子邮件:

$ git config --global user.email email@foo.com 确认你已经正确设置了 Git 邮箱:

$ git config --global user.email

电子邮件@foo.com

于 2019-06-08T14:40:38.917 回答
1

如果担心隐藏真实的电子邮件地址,另一种选择......如果您致力于 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

于 2014-08-20T02:49:05.457 回答
1

这完全取决于你如何提交。

例如:

git commit -am "Some message"

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

[user]
    email = someemail@gmail.com

那将是您要更改的电子邮件。如果您通过 Bitbucket 或 Github 等进行拉取请求,您将是您登录的任何人。

于 2020-01-25T08:06:50.503 回答