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

Wil*_*eer 112 git commit

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

git commit --author="john doe" -m "some fix"
fatal: No existing author found with 'john doe'
Run Code Online (Sandbox Code Playgroud)

尝试仅使用电子邮件地址提交时遇到同样的问题

git commit --author="john@doe.com" -m "some fix"
fatal: No existing author found with 'john@doe.com'
Run Code Online (Sandbox Code Playgroud)

在commit命令的git手册页上,它说我可以使用

standard A U Thor <author@example.com> format
Run Code Online (Sandbox Code Playgroud)

对于--author选项.

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

eyk*_*nal 130

正如本SO答案所暗示的那样,所需的最小作者格式是

Name <email>
Run Code Online (Sandbox Code Playgroud)

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

git commit --author="Name <email>" -m "whatever"
Run Code Online (Sandbox Code Playgroud)

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

git commit --author="Name <>" -m "whatever"
Run Code Online (Sandbox Code Playgroud)

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

  • 刚刚发现,如果你没有电子邮件地址,你也可以输入"name <>",明确地将其留空而不是输入伪造. (26认同)
  • 显然即使使用该选项,你仍然需要在你的git配置中设置user.email和user.name,否则git会抱怨. (4认同)
  • 如果您要使用`“ name &lt;&gt;”`,然后使用`git commit --amend`,它将失败,并显示“ invalid ident”错误;所以只是不要 (2认同)

pmr*_*pmr 46

具体格式为:

git commit --author="John Doe <john@doe.com>" -m "Impersonation is evil." 
Run Code Online (Sandbox Code Playgroud)

  • 如果您以 John Doe 的名义提交,为什么不需要 John Doe 的密码? (2认同)
  • @Narek在这种背景下会是什么? (2认同)

Wil*_*eer 31

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

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

AU Thor = 必填用户名

  • 字符的分离可能表示允许空格,也可能类似于首字母.
  • 用户名必须后跟1个空格,额外的空格将被截断

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

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

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

例子:

  1. 只有用户名

    明确省略电子邮件地址:

    git commit --author="John Doe <>" -m "Impersonation is evil."
    
    Run Code Online (Sandbox Code Playgroud)
  2. 只有电子邮件

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

    git commit --author="john@doe.com <>" -m "Impersonation is evil." 
    
    Run Code Online (Sandbox Code Playgroud)

我试图将存储库从mercurial转换为git时遇到了这个问题.我测试了msysgit 1.7.10上的命令.


use*_*284 17

--author选项不起作用:

*** Please tell me who you are.

Run

  git config --global user.email "you@example.com"
  git config --global user.name "Your Name"
Run Code Online (Sandbox Code Playgroud)

这样做:

git -c user.name='A U Thor' -c user.email=author@example.com commit
Run Code Online (Sandbox Code Playgroud)

  • @Martin是的,因为“-c”标志属于“git”命令本身,而不是“commit”子命令(顺便说一句,它有一个不同的“-c”) `` 标志) (4认同)
  • 这才是真正的答案。其余的建议 --author 根本没有帮助,因为仍然需要用户名和电子邮件。 (4认同)
  • 这是唯一对我有用的。请注意顺序很重要。`git commit -c user.name="j bloggs" -am "message"` 给出错误`致命:选项 -m 不能与 -c/-C/-F 结合使用 (2认同)

qin*_*ian 10

只是补充?

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”


KL-*_*L-7 6

格式

A U Thor <author@example.com>
Run Code Online (Sandbox Code Playgroud)

只是意味着你应该指定

FirstName MiddleName LastName <email@example.com>
Run Code Online (Sandbox Code Playgroud)

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

git commit --author="John <john@doe.com>" -m "some fix"
Run Code Online (Sandbox Code Playgroud)

正如文档所说:

  --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.
Run Code Online (Sandbox Code Playgroud)

如果你不使用这种格式,git会将提供的字符串视为模式,并尝试在其他提交的作者中查找匹配的名称.


Tos*_*kan 6

git -c "user.name={{ name }}" -c "user.email={{ email }}" commit -m "{{ message }}"
Run Code Online (Sandbox Code Playgroud)

其中 {{ }} 表示您输入的值