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

km0tfn4u  于 2022-12-17  发布在  Git
关注(0)|答案(6)|浏览(131)

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

gc0ot86w

gc0ot86w1#

首先,提交者和提交者不一定是同一个人,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 ...

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

jc3wubiy

jc3wubiy2#

试着将以下代码添加到git命令的前面:

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

这对于一次性操作来说是可以的,但是你可以把它保存在从git克隆的本地存储库的.git/config文件中,这可以通过运行git config(不使用--global或--system来使它成为“本地存储库”)或者编辑.git/config(语法与~/.gitconfig相同

daolsyd0

daolsyd03#

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

ubbxdtey

ubbxdtey4#

我相信你能跑:

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
此外,我相信有一种方法可以通过在命令本身中使用github用户名和密码来推送到远程repo,但我没有引用它,因为它对我不起作用。

uhry853o

uhry853o5#

在Jesse Glick的回答之后,这里扩展了实现,因为IMO他的建议是实现这一点的最佳方法。
把下面的代码添加到你的.bash_profile中,当你在当前shell中第一次运行git命令时,它会提示你输入用户名,然后在以后的运行中记住这个用户名。
(很明显,在case块中交叉引用一个输入的user值到各个git auther/name值所需的确切名称和电子邮件地址,并根据需要更新assign)

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

rqcrx0a66#

您还可以在每个shell甚至每个命令的基础上设置环境变量GIT_COMMITTER_NAMEGIT_COMMITTER_EMAILGIT_AUTHOR_NAMEGIT_AUTHOR_EMAIL
实际上,自Git 2.22(Q2 2019)以来,你有了一个新的选择:引入了四个新的配置变量{author,committer}.{name,email},以便在更具体的情况下覆盖user.{name,email}
参见William Hubbs (``)commit 39ab4d0(2019年2月4日)。
(由Junio C Hamano -- gitster --合并至commit 4e021dc,2019年3月7日)

config:允许提供单独的作者和提交者标识

author.emailauthor.namecommitter.emailcommitter.name设置类似于GIT_AUTHOR_*GIT_COMMITTER_*环境变量,但适用于git config系统。
这允许为每个存储库单独设置它们。
Git支持用环境变量设置不同的作者和提交者信息,但是环境变量是在shell中设置的,所以如果不同的仓库需要不同的作者和提交者信息,就需要一个外部工具。
这为git config添加了对author.emailauthor.namecommitter.emailcommitter.name设置的支持,这样就可以为每个仓库设置这些信息。

相关问题