覆盖已配置的用户进行单个git提交

时间:2013-11-07 16:12:24

标签: git github

我正在尝试从我的工作笔记本电脑上提交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项目。还有什么我可以尝试的,甚至可能吗?

6 个答案:

答案 0 :(得分:116)

首先,作者不一定与提交者相同。 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 ...

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

答案 1 :(得分:41)

尝试将其添加到您的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的语法相同来完成)

答案 2 :(得分:22)

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

答案 3 :(得分:7)

我相信你可以跑:

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

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

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

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

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

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

答案 4 :(得分:4)

跟随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 "$@"
}

答案 5 :(得分:0)

  

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

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

请参见commit 39ab4d0William Hubbs (``)(2019年2月4日)。
(由Junio C Hamano -- gitster --commit 4e021dc中合并,2019年3月7日)

  

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

     

author.emailauthor.namecommitter.emailcommitter.name的设置类似于GIT_AUTHOR_*GIT_COMMITTER_*环境变量,但对于{ {1}}系统。
  这样就可以为每个存储库分别设置它们。

     

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

     

这为git configauthor.emailauthor.namecommitter.email设置的git config添加了支持,因此可以在每个存储库中设置此信息。