覆盖为单个git提交配置的用户

覆盖为单个git提交配置的用户,git,github,Git,Github,我正试图从我的工作笔记本电脑上提交一个项目,该笔记本电脑已经为公司的git服务器配置好了。是否有一种方法可以指定不同的作者凭据(可能使用不同的配置文件或其他命令行开关) 我试过使用 --author="My Name <MyNameEmail@email.com>" --author=“我的名字” 我收到了信息: Committer: unknown <WorkEmail@workemail.net> Your name and email address wer

我正试图从我的工作笔记本电脑上提交一个项目,该笔记本电脑已经为公司的git服务器配置好了。是否有一种方法可以指定不同的作者凭据(可能使用不同的配置文件或其他命令行开关)

我试过使用

--author="My Name <MyNameEmail@email.com>" 
--author=“我的名字”
我收到了信息:

 Committer: unknown <WorkEmail@workemail.net>
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

After doing this, you may fix the identity used for this commit with:

    git commit --amend --reset-author
提交者:未知
您的姓名和电子邮件地址已根据自动配置
在您的用户名和主机名上。请检查它们是否准确。
您可以通过显式设置来抑制此消息:
git config--global user.name“Your name”
git config--全局user.emailyou@example.com
执行此操作后,您可以通过以下方式修复用于此提交的标识:
git提交--修改--重置作者

但它仍然没有更新我提交github.com项目的用户名。还有什么我可以尝试的吗?甚至可能吗?

我相信你可以跑:

git config user.name "Your Name"
git config user.email you@example.com
对于git的不同部分。尝试打开正在为github服务器执行repo工作的文件夹

确保在该工作文件夹中看到.git文件夹。现在在Terminal/Console/CommandPrompt中打开该文件夹,并尝试仅通过运行上面指定的命令来更改该文件夹的用户名和电子邮件

通过改变这一点,您现在可以访问GitHub服务器

请看这里:‎


另外,我相信有一种方法可以通过在命令本身中使用github用户名和密码来推动远程回购,但我不引用它,因为它对我不起作用。

首先,作者不一定与提交人相同。Git同时跟踪这两个方面

要设置仅用于此存储库的名称,可以执行以下操作:

git config user.name“您的名字”
git config user.email“您的电子邮件”
请注意缺少
--global
选项。这将仅在此存储库中设置配置

或者,您可以使用
-c
选项仅对单个命令执行此操作:

git-c“user.name=您的姓名”-c“user.email=您的电子邮件”提交。。。

但我认为最好只使用上面的配置选项。

试着在git命令前面加上:

git -c user.email=email@domain.fr -c user.name='Your Name'

这对于一次性操作来说是可以的,但是您可以将其保存在从git克隆的本地repo的.git/config文件中。这可以通过运行
git config
(no--global或--system使其成为“回购的本地”)或编辑
.git/config
(它的语法与
~/.gitconfig

相同,您还可以在每个shell甚至每个命令的基础上设置环境变量
GIT\u提交者名称
GIT\u提交者电子邮件
GIT\u作者姓名
GIT\u作者电子邮件

接下来是Jesse Glick的答案,并扩展了实现因为在我看来,他的建议是最好的办法

将以下内容添加到您的.bash_配置文件中。当第一次在活动shell中运行任何git命令时,它将提示您输入用户。然后,它将记住所有后续运行的用户

(显然,交叉引用输入的用户值,以精确地获得case块中各种git auther/name值所需的名称和电子邮件地址,并根据需要更新赋值)


您还可以在每个shell甚至每个命令的基础上设置环境变量
GIT\u COMMITTER\u NAME
GIT\u COMMITTER\u EMAIL
GIT\u AUTHOR\u NAME
,以及
GIT\u AUTHOR\u EMAIL

实际上,自Git2.22(2019年第2季度)以来,您有了一个新的选项:在更具体的情况下,引入了四个新的配置变量
{author,committer}.{name,email}
来覆盖
用户。{name,email}

参见(2019年2月4日)作者。
(于2019年3月7日合并)

config
:允许提供独立的作者和提交人标识
author.email
author.name
committer.email
committer.name
设置类似于
GIT\u author.*
GIT\u committer.*
环境变量,但适用于
GIT config
系统。
这允许为每个存储库分别设置它们

Git支持使用环境变量设置不同的作者身份和提交人信息。但是,环境变量是在shell中设置的,因此如果不同的存储库需要不同的作者身份和提交人信息,则需要外部工具

这为git配置添加了对
author.email
author.name
committer.email
committer.name
设置的支持,因此可以为每个存储库设置此信息


Git区分作者和提交人。要为一个命令临时设置提交人,请使用
-c user.name=Me user.email=me@example.com
。要使用自定义全局配置,请参阅,或使用包含
-c
选项的shell别名。但在这种情况下,这两个选项都不是正确的选择-您需要per-repo配置。使用Git 2.22(2019年第2季度),您将拥有专用设置
{author,committer}.{name,email}
。这正是我所需要的,因为我需要从共享帐户(devel服务器上的root)提交我不想让别人知道我的名字/电子邮件。太好了,因为这主要用于共享计算机场景,每个会话自动清理是完美的。对我来说不起作用。作者在
git commit--amend
之后保持不变。只有提交者发生了变化。我在这里也做了
git commit--amend--author=“$GIT\u COMMITTER\u NAME”
这是因为
GIT commit--amend
by design不会改变作者,正如主页上所说。解决方案:
GIT commit--amend--reset author
谢谢!我正在与多人共享一台服务器,并且不想使用它
git() {
  echo "Running BETTER git..."
  if [ -z "$GIT_COMMITTER_NAME" ]; then
    while true; do
      read -p "Git User: " UNAME
      case $UNAME in
          user1 ) break;;
          user2 ) break;;
          * ) echo "Invalid User";;
      esac
    done
    GIT_COMMITTER_NAME=$UNAME
    export GIT_COMMITTER_NAME
    GIT_COMMITTER_EMAIL=$UNAME@domain.com
    export GIT_COMMITTER_EMAIL
    GIT_AUTHOR_NAME=$GIT_COMMITTER_NAME
    export GIT_AUTHOR_NAME
    GIT_AUTHOR_EMAIL=$GIT_COMMITTER_EMAIL
    export GIT_AUTHOR_EMAIL
  fi
  echo "  using git user: $GIT_AUTHOR_NAME / $GIT_AUTHOR_EMAIL"
  /usr/bin/git "$@"
}