是否可以以不同的用户身份进行推送?

Hri*_*dov 4 git github

我正在创建一个基于 Web 的 PHP 客户端,用于使用 Git 管理网站内容。我想将提交与登录管理面板的各个人员相关联。我知道我可以这样做:

git commit --message="foo" --author="John Doe <john@example.com>"
Run Code Online (Sandbox Code Playgroud)

但是,您也可以通过管理面板推送到远程存储库(在我的例子中,托管在 GitHub 上)。我似乎无法使用以下内容设置提交者的姓名/电子邮件:

git push origin master --author="John Doe <john@example.com>"
Run Code Online (Sandbox Code Playgroud)

...所以在 GitHub 中,作者是 John Doe,但提交者是我:

git 推送示例


我注意到提交者是基于 Git 配置的。所以我可以改变它并得到正确的结果:

git Push 作为正确的作者


我的问题是,我需要这样做吗:

git config user.name {{ panel user name }}
git config user.email {{ panel user email }}
git push origin master
Run Code Online (Sandbox Code Playgroud)

...每次有人推送到存储库时,或者有更好的方法吗?我喜欢你如何在 中指定作者git commit。这也能以某种方式实现git push吗?

Dav*_*d Z 6

创建者和提交者实际上是作为提交对象本身的一部分存储的。因此,如果您想自定义作者和提交者名称,则需要在运行时进行git commit。根据官方文档,您可以通过这四个环境变量来设置作者和提交者信息:

GIT_AUTHOR_NAME
GIT_AUTHOR_EMAIL
GIT_COMMITTER_NAME
GIT_COMMITTER_EMAIL
Run Code Online (Sandbox Code Playgroud)

或者,您可以将自定义临时配置选项传递git使用选项-c

git -c user.name="John Doe" -c user.email="john@example.com" commit ...
Run Code Online (Sandbox Code Playgroud)

我相信使用脚本中的环境变量更为典型,但我不确定为什么(或者,真的,如果)是这种情况。

请注意,该push命令只是将现有提交对象(包括其存储的作者和提交者信息)发送到服务器。你不能在推送时更改作者或提交者,至少据我所知不能使用标准 git。我不确定您如何设法将--author选项传递给git push,但它没有在文档中列出。

  • 查看“git log”和“git show”的选项,“--full”应该可以;您还可以使用 `git cat-file -p &lt;commit&gt;` (2认同)
  • @dodov 正如 LeGEC 所说,看看“git log”的(长得可笑的)选项集,特别是“漂亮的日志格式”小节。`git log` 仔细地只向您显示可用内容的一些*有趣的子集*,因为“所有内容”通常太多了。事实上,“git log”的大多数参数都是关于将输出削减为您想要的:“git log --grep”意味着*根据日志消息中的内容进行削减*,“git log -S”意味着*根据父子之间的差异进行削减*等。 (2认同)