如何在提交后以不同的用户名git push?

92vpleto  于 5个月前  发布在  Git
关注(0)|答案(2)|浏览(89)

post类似,Git仓库是否可以在推送前提示输入用户名?有几个人使用同一个用户凭据使用这台计算机,而不是将其称为“工作站”,我们想知道谁用他们各自的用户名为每个git push提交了一个提交。推送和编写提交消息的作者是相同的。
option to add the url origin with a password via https is insufficient,我更喜欢提示输入用户名,而不是错误地让提交显示为其他人,就像在thread中提到的那样。

kfgdxczn

kfgdxczn1#

在经历了几个兔子洞之后,我最终使用了位于我的repo中的post-commit客户端钩子:[REPO]/.git/hooks/post-commit。必须确保文件post-commit没有扩展名并且是可执行的。我认为这种特殊的策略最适合用例,因为它允许作者修改为每次提交的预期用户,以及利用git托管平台将电子邮件地址与适当的用户名相关联的能力。git push有几个可以调用的钩子,然而,最好是在提交消息输入后捕获,以防在输入后不能立即保证推送。下面的脚本将提示用户输入作者,提交消息的电子邮件地址(* 让提示符工作有点棘手,但这个SO answer帮了大忙 *)。由于正常运行git commit会导致递归发生,因为post-commit * 不会影响git commit的结果 *,因此会创建一个文件并销毁,以防止在设置新的环境值后出现无限循环。

#!/bin/sh

#Break out of recursion
recursion_author_flag="RECURSION_FILE"
if test -f $recursion_author_flag; then
  rm $recursion_author_flag
  exit 0
fi

# Redirect output to stderr.
exec 1>&2

# enable user input
exec < /dev/tty

# Prompt for author
read -p "Enter author name: " author

# Prompt for email
read -p "Enter email: " email

# Amend the commit with new author information
export GIT_COMMITTER_NAME="$author"
export GIT_AUTHOR_NAME="$author"
export GIT_COMMITTER_EMAIL="$email"
export GIT_AUTHOR_EMAIL="$email"
touch $recursion_author_flag
git commit --amend --reset-author

字符串

nxowjjhe

nxowjjhe2#

首先需要正确区分git commitgit push

  • git commit在本地存储库中创建一个新提交,并在提交中记录用户名和电子邮件
  • git push用于将新的本地提交/分支同步到远程存储库-无需更改/编辑推送的提交

git push中涉及的唯一“用户”是访问远程存储库服务器所需的凭据。
因此,您需要寻找的是如何在git commit时设置正确的作者(和提交者)。
git commit手册页中所述,此信息来自

  • 环境变量(GIT_AUTHOR_NAMEGIT_AUTHOR_EMAIL,.)
  • git配置项user.nameuser.email
  • 从命令行git commit --author=...

其中后者可以被配置为

  • 每个存储库使用git config user.name ...(即,在[REPO]/.git/config中),或
  • 全局使用git config --global user.name ...(即,每个操作系统用户,以~/.gitconfig为单位)。

因此,要在使用同一系统用户登录时使用不同的作者名,
1.让你的用户总是使用--author标志提交
1.只需给予每个人他们自己的存储库本地副本,并在该目录中使用git config user.name ...配置他们各自的名称
1.相应地设置GIT_AUTHOR_NAME等环境变量
从这些1.只有当你的用户在每次提交(和合并!)时提供正确的--author标志时才能可靠地工作。2.是一个很好的解决方案,只要你不需要/不想只有一个本地仓库。
但是3.可能是最好的解决方案-如果你能可靠地设置环境变量的话。为此,你可以使用,例如,~/.bashrc or ~/.profile,其中你可以从用户那里readexportGIT_AUTHOR_NAME等-这也只需要在登录时做一次,而不是每次提交。
奖励提示:
你可以在本地仓库中设置一个空的user.nameuser.email,以防止在没有明确指定作者(使用--author=...GIT_AUTHOR_NAME)时使用不正确的作者提交-如果git无法确定作者姓名,它将中止任何提交。
或者,你可以通过设置一个已知的默认名称(例如,git config user.name "DEFAULT")并使用pre-commit钩子来验证GIT_AUTHOR_NAME不是DEFAULT,否则会中止提交,并显示一条错误消息,指导用户如何正确设置作者名称:

#!/bin/bash
# pre-commit hook

if [ "$GIT_AUTHOR_NAME" = "DEFAULT" ]; then
  echo 'Please first specify your name and e-mail with the following commands:' >&2

  echo 'export GIT_AUTHOR_NAME="<Your Name>"' >&2
  echo 'export GIT_AUTHOR_EMAIL="<Your E-Mail>"' >&2
  echo 'export GIT_COMMITTER_NAME="$GIT_AUTHOR_NAME"' >&2
  echo 'export GIT_COMMITTER_EMAIL="$GIT_AUTHOR_EMAIL"' >&2

  exit 1
fi

字符串

相关问题