覆盖单个git commit的已配置用户


97

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


2
Git区分作者提交者。要为一个命令临时设置提交者,请使用-c user.name=Me user.email=me@example.com。要使用自定义全局配置,请参阅此问题,或使用包含-c选项的shell别名。但是在这种情况下,这两种方法都不是正确的做法-您需要按存储库配置。
罗宾·格林

使用Git 2.22(2019年第二季度),您将拥有专用设置{author,committer}.{name,email}请参阅下面的答案
VonC

Answers:


177

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

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


5
正是我需要的,因为我需要将共享帐户(在devel服务器上的根目录)提交到我自己下的git repo中,并且我不希望向他人提供我的姓名/电子邮件。
andrej

57

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

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

可以一次性完成,但您最好将其保存在从git克隆的本地存储库的.git / config文件中。这可以通过运行git config (没有--global或--system使其“在仓库中本地化”)或编辑.git/config(与...的语法相同)来完成。~/.gitconfig


1
谢谢!我要与多人共享一台服务器,并且不想设置默认用户。太棒了!
horriblyUnpythonic

1
@horriblyUnpythonic,欢迎您:)您还可以在中创建别名.bash_aliases,和/或还可以设置预提交钩子以在未定义用户时拒绝提交。
Asenar '16

28

你也可以设置环境变量GIT_COMMITTER_NAMEGIT_COMMITTER_EMAILGIT_AUTHOR_NAME,并GIT_AUTHOR_EMAIL在每个外壳甚至每个命令的基础。


太好了,因为这将主要用于共享计算机方案中,因此每个会话都具有自动清除功能是完美的。
kmac

1
没为我工作。作者之后保持不变git commit --amend。只有提交者更改了。
OndraŽižka17年

我在这里也一样git commit --amend --author="$GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>"
-KCD

1
这是因为git commit --amend按照手册页的说明,设计不会改变作者。解决方案: git commit --amend --reset-author
kubanczyk

7

我相信您可以运行:

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

对于git的不同部分。尝试打开完成回购到github服务器的文件夹。

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

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

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

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


5

在此处对Jesse Glick的回答进行了扩展实施,因为IMO的建议是实现此目标的最佳方法。

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

(显然,将输入的用户值交叉引用到case块中各种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 "$@"
}

2

你也可以设置环境变量GIT_COMMITTER_NAMEGIT_COMMITTER_EMAILGIT_AUTHOR_NAME,并GIT_AUTHOR_EMAIL在每个外壳甚至每个命令的基础。

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

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

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

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.