132

我正在尝试从我的工作笔记本电脑上提交github.com上的一个项目,该笔记本电脑已经为公司 git 服务器配置。有没有办法提交指定不同的作者凭据,可能使用不同的配置文件或其他命令行开关?

我试过使用

--author="My Name <MyNameEmail@email.com>" 

我收到了消息:

 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

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

4

6 回答 6

244

首先,作者不一定与提交者相同。Git 跟踪两者。

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

git config user.name "Your Name"
git config user.email "Your email"

请注意该--global选项的缺失。这将仅在此存储库中设置配置。

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

git -c "user.name=Your Name" -c "user.email=Your email" commit ...

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

于 2013-11-07T16:23:09.167 回答
70

尝试将此添加到您的 git 命令中:

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

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

于 2013-11-07T16:23:49.533 回答
33

您还可以在每个 shell 甚至每个命令的基础上设置环境变量GIT_COMMITTER_NAMEGIT_COMMITTER_EMAILGIT_AUTHOR_NAME和。GIT_AUTHOR_EMAIL

于 2016-06-21T20:54:16.130 回答
8

我相信你可以运行:

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

对于 git 的不同部分。尝试打开正在为 github 服务器的 repo 完成工作的文件夹。

确保您在该工作文件夹中看到一个 .git 文件夹。现在在终端/控制台/命令提示符中打开该文件夹,并尝试仅通过运行我上面指定的命令来更改该文件夹的用户名和电子邮件。

通过更改它,您现在可以访问 GitHub 服务器。

看看这里:https ://help.github.com/articles/setting-your-username-in-git ‎</p>

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

于 2013-11-07T16:21:57.970 回答
5

通过扩展实施来跟进 Jesse Glick 的回答,因为 IMO 他的建议是最好的方法。

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

(显然,交叉引用输入用户值以准确地为案例块中的各种 git auther/name 值提供所需的名称和电子邮件地址,并根据需要更新分配)

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 "$@"
}
于 2016-08-31T00:54:51.277 回答
4

您还可以在每个 shell 甚至每个命令的基础上设置环境变量GIT_COMMITTER_NAMEGIT_COMMITTER_EMAILGIT_AUTHOR_NAME和。GIT_AUTHOR_EMAIL

实际上,从 Git 2.22(2019 年第二季度)开始,您有了一个新选项:{author,committer}.{name,email}引入了四个新的配置变量,以便user.{name,email}在更具体的情况下覆盖。

请参阅William Hubbs (``)的提交 39ab4d0(2019 年 2 月 4 日) 。(由Junio C Hamano 合并 -- --4e021dc 提交中,2019 年 3 月 7 日)
gitster

config:允许给出单独的作者和提交者身份

、和设置类似于和环境变量,但用于author.email系统。 这允许为每个存储库单独设置它们。author.namecommitter.emailcommitter.nameGIT_AUTHOR_*GIT_COMMITTER_*git config

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

这增加了对 git config author.email、和settings 的支持author.name, 因此可以为每个存储库设置此信息。committer.emailcommitter.name

于 2019-03-10T01:01:18.420 回答