我可以在. gitconfig中为自己指定多个用户吗?

在我的~/.gitconfig中,我在[user]下列出了我的个人电子邮件地址,因为这是我想用于Github存储库的地址。

但是,我最近也开始在工作中使用git。我公司的git repo允许我提交,但是当它发出新变更集的公告时,它说它们来自Annamous,因为它无法识别我.gitconfig中的电子邮件地址-至少,这是我的理论。

是否可以在.gitconfig中指定多个[user]定义?或者是否有其他方法可以覆盖某个目录的默认.gitconfig?在我的情况下,我检查了~/worksrc/中的所有工作代码-是否有办法仅为该目录(及其子目录)指定.gitconfig

361167 次浏览

您可以将单个存储库配置为使用覆盖全局配置的特定用户/电子邮件地址。从存储库的根目录运行

git config user.name "Your Name Here"git config user.email your@email.com

而默认用户/电子邮件配置在您的~/. gitconfig中

git config --global user.name "Your Name Here"git config --global user.email your@email.com

或者您可以在本地.git/config文件中添加以下信息

[user]name = Your Nameemail = your.email@gmail.com

Orr Sella的博客文章中获得一些灵感后,我写了一个预提交钩子(驻留在~/.git/templates/hooks中),它将根据本地存储库./.git/config中的信息设置特定的用户名和电子邮件地址:

您必须将模板目录的路径放入您的~/.gitconfig

[init]templatedir = ~/.git/templates

然后每个git initgit clone将拿起该钩子并在下一个git commit期间应用用户数据。如果您想将钩子应用于已经存在的存储库,那么只需在存储库中运行git init即可重新初始化它。

这是我想出的钩子(它仍然需要一些润色-欢迎提出建议)。将其保存为

~/.git/templates/hooks/pre_commit

~/.git/templates/hooks/post-checkout

并确保它是可执行的:chmod +x ./post-checkout || chmod +x ./pre_commit

#!/usr/bin/env bash
# -------- USER CONFIG# Patterns to match a repo's "remote.origin.url" - beginning portion of the hostnamegit_remotes[0]="Github"git_remotes[1]="Gitlab"
# Adjust names and e-mail addresseslocal_id_0[0]="my_name_0"local_id_0[1]="my_email_0"
local_id_1[0]="my_name_1"local_id_1[1]="my_email_1"
local_fallback_id[0]="${local_id_0[0]}"local_fallback_id[1]="${local_id_0[1]}"

# -------- FUNCTIONSsetIdentity(){local current_id local_id
current_id[0]="$(git config --get --local user.name)"current_id[1]="$(git config --get --local user.email)"
local_id=("$@")
if [[ "${current_id[0]}" == "${local_id[0]}" &&"${current_id[1]}" == "${local_id[1]}" ]]; thenprintf " Local identity is:\n"printf "»  User: %s\n»  Mail: %s\n\n" "${current_id[@]}"elseprintf "»  User: %s\n»  Mail: %s\n\n" "${local_id[@]}"git config --local user.name "${local_id[0]}"git config --local user.email "${local_id[1]}"fi
return 0}
# -------- IMPLEMENTATIONcurrent_remote_url="$(git config --get --local remote.origin.url)"
if [[ "$current_remote_url" ]]; then
for service in "${git_remotes[@]}"; do
# Disable case sensitivity for regex matchingshopt -s nocasematch
if [[ "$current_remote_url" =~ $service ]]; thencase "$service" in
"${git_remotes[0]}" )printf "\n»» An Intermission\n»  %s repository found." "${git_remotes[0]}"setIdentity "${local_id_0[@]}"exit 0;;
"${git_remotes[1]}" )printf "\n»» An Intermission\n»  %s repository found." "${git_remotes[1]}"setIdentity "${local_id_1[@]}"exit 0;;
* )printf "\n»  pre-commit hook: unknown error\n» Quitting.\n"exit 1;;
esacfidoneelseprintf "\n»» An Intermission\n»  No remote repository set. Using local fallback identity:\n"printf "»  User: %s\n»  Mail: %s\n\n" "${local_fallback_id[@]}"
# Get the user's attention for a secondsleep 1
git config --local user.name "${local_fallback_id[0]}"git config --local user.email "${local_fallback_id[1]}"fi
exit 0

编辑:

所以我在Python中将钩子重写为钩子和命令。此外,也可以将脚本调用为Git命令(git passport)。也可以在配置文件(~/.gitpassport)中定义任意数量的ID,这些ID可以在提示符上选择。您可以在github.com:用Python编写的Git命令和钩子,用于管理多个Git帐户/用户身份找到该项目。

windows环境

另外,如果您在系统中安装了它,可以从Git Extensions --> Settings --> Global Settings修改。

最新版本

右键单击Windows环境中的文件夹/目录以访问这些设置。在此处输入图片描述

更新如何在2.49版中切换/维护多个设置如何在版本2.49中切换/维护多个设置

git使用多个名称/电子邮件的另一种选择是混淆现象git并使用-c标志覆盖全局和存储库特定的配置。

例如,通过定义别名:

alias git='/usr/bin/git -c user.name="Your name" -c user.email="name@example.com"'

要查看它是否有效,只需键入git config user.email

$ git config user.emailname@example.com

您还可以在$PATH中放置自定义git可执行文件,而不是别名。

#!/bin/sh/usr/bin/git -c user.name="Your name" -c user.email="name@example.com" "$@"

与特定于存储库的.git/config相比,这些方法的一个优点是,当自定义git程序处于活动状态时,它适用于每个git存储库。通过这种方式,您可以轻松地在用户/名称之间切换,而无需修改任何(共享)配置。

如果您不想拥有默认电子邮件地址(指向github用户的电子邮件地址链接),您可以配置您希望被询问。如何做到这一点取决于您使用的git版本,见下文。

(预期的)缺点是您必须为每个存储库配置一次您的电子邮件地址(和您的姓名)。所以,你不能忘记这样做。

版本<2.7.0

[user]name = Your nameemail = "(none)"

在您的全局配置~/.gitconfig中,如Dan Aloni在Orr Sella的博客文章中的评论所述。当尝试在存储库中进行第一次提交时,git失败并显示漂亮的消息:

*** Please tell me who you are.
Run
git config --global user.email "you@example.com"git config --global user.name "Your Name"
to set your account's default identity.Omit --global to set the identity only in this repository.
fatal: unable to auto-detect email address (got '(none)')

当电子邮件地址在本地设置时,名称取自全局配置(消息不完全准确)。

2.7.0≤版本<2.8.0

版本<2.7.0中的行为并非有意在2.7.0中修复。您仍然可以使用Orr Sella的博客文章中描述的预提交钩子。此解决方案也适用于其他版本,但其他解决方案不适用于此版本。

版本≥2.8.0

丹·阿罗尼补充说实现该行为的选项(参见发行说明)。将其与:

[user]useConfigOnly = true

要使其正常工作,您可能不会在全局配置中提供姓名或电子邮件地址。然后,在第一次提交时,您会收到一条错误消息

fatal: user.useConfigOnly set but no name given

因此,该消息不是很有指导意义,但由于您显式设置了选项,您应该知道该怎么做。与版本<2.7.0的解决方案相反,您始终必须手动设置名称和电子邮件

$ git config user.name "Your Name"$ git config user.email "your@email.com"

它仅在当前存储库中设置您的姓名和电子邮件。

一个命令github帐户切换

此解决方案采用单个git别名的形式。执行后,当前项目用户将附加到另一个帐户

生成ssh密钥

ssh-keygen -t rsa -C "rinquin.arnaud@gmail.com" -f '/Users/arnaudrinquin/.ssh/id_rsa'
[...]
ssh-keygen -t rsa -C "arnaud.rinquin@wopata.com" -f '/Users/arnaudrinquin/.ssh/id_rsa_pro'

将它们链接到您的GitHub/BitBay帐户

  1. 复制默认公钥pbcopy < ~/.ssh/id_rsa.pub
  2. 登录您的GitHub帐户
  3. 将密钥粘贴到add SSH key github页面
  4. 复制其他公钥pbcopy < ~/.ssh/id_rsa_pro.pub
  5. 为每个其他帐户重复和调整步骤2到4

步骤1.自动ssh密钥切换。

我们可以根据host配置ssh以使用特定的加密密钥发送。好的事情是,您可以为同一个hostname拥有多个别名。

请参阅此示例~/.ssh/config文件:

# Default GitHubHost github.comHostName github.comUser gitIdentityFile ~/.ssh/id_rsa
# Professional github aliasHost github_proHostName github.comUser gitIdentityFile ~/.ssh/id_rsa_pro

git远程配置

您现在可以通过将git@github.com更改为git@github_pro来在git远程环境中使用这些别名。

您可以更改现有的项目远程(使用git remote set-url origin git@github_pro:foo/bar.git之类的东西)或在克隆它们时直接调整它们。

git clone git@github.com:ArnaudRinquin/atom-zentabs.git

使用别名,它变成:

git clone git@github_pro:ArnaudRinquin/atom-zentabs.git

步骤2.更改gituser.email

Git配置设置可以是全局的或每个项目的。在我们的例子中,我们想要每个项目的设置。更改它很容易:

git config user.email 'arnaud.rinquin@wopata.com'

虽然这很容易,但对于我们这样的开发人员来说需要很长时间。我们可以为此编写一个非常简单的git别名。

我们将把它添加到~/.gitconfig文件中。

[user]name = Arnaud Rinquinemail = rinquin.arnaud@gmail.com
...
[alias]setpromail = "config user.email 'arnaud.rinquin@wopata.com'"

然后,我们所要做的就是git setpromail仅为此项目更改我们的电子邮件。

第3步。请一个命令开关?!

使用单个无参数命令从默认帐户切换到指定帐户不是很好吗?这绝对是可能的。此命令将有两个步骤:

  • 将当前项目远程更改为选定的别名
  • 更改当前项目user.email配置

我们已经为第二步提供了一个命令解决方案,但第一步要困难得多。一个命令远程主机更改

以下是另一个git alias命令形式的解决方案,可以添加到您的~/.gitconfig中:

[alias]changeremotehost = !sh -c \"git remote -v | grep '$1.*fetch' | sed s/..fetch.// | sed s/$1/$2/ | xargs git remote set-url\"

这允许将所有遥控器从一个主机更改为另一个主机(别名)。参见示例:

$ > git remote -vorigin  git@github.com:ArnaudRinquin/arnaudrinquin.github.io.git (fetch)origin  git@github.com:ArnaudRinquin/arnaudrinquin.github.io.git (push)
$ > git changeremotehost github.com github_pro
$ > git remote -vorigin  git@github_pro:ArnaudRinquin/arnaudrinquin.github.io.git (fetch)origin  git@github_pro:ArnaudRinquin/arnaudrinquin.github.io.git (push)

把它们全部合并

我们现在只需将这两个命令合并为一个,这很容易。请参阅我还如何集成比特桶主机切换。

[alias]changeremotehost = !sh -c \"git remote -v | grep '$1.*fetch' | sed s/..fetch.// | sed s/$1/$2/ | xargs git remote set-url\"setpromail = "config user.email 'arnaud.rinquin@wopata.com'"gopro = !sh -c \"git changeremotehost github.com github_pro && git changeremotehost bitbucket.com bitbucket_pro && git setpromail\"

源代码链接-Github

源码链接-教程

有一个简单的解决方案似乎可以很好地避免错误。

只需从~/.gitconfig中删除[user]部分,这将阻止您在没有为每个存储库设置user.name的情况下进行任何提交。

~/.bashrc中,为用户和电子邮件添加一些简单的别名:

alias ggmail='git config user.name "My Name";git config user.email me@gmail.com'alias gwork='git config user.name "My Name";git config user.email me@work.job'

GIT_AUTHOR_EMAIL+本地.bashrc

.bashrc_local:不要跟踪此文件,仅将其放在您的工作计算机上:

export GIT_AUTHOR_EMAIL='me@work.com'export GIT_COMMITTER_EMAIL="$GIT_AUTHOR_EMAIL"

.bashrc:跟踪此文件,使其在工作和家庭计算机上相同:

F="$HOME/.bashrc_local"if [ -r "$F" ]; then. "$F"fi

我正在使用https://github.com/technicalpickles/homesick来同步我的点文件。

如果只有gitconfig接受环境变量:git配置中的Shell变量扩展

这个答案的部分灵感来自@Saucier的帖子,但我正在寻找一种基于远程的自动方法来在每个存储库的基础上设置user.nameuser.email,这比他开发的git-护照包轻一点。此外,h/t到@John进行useConfigOnly设置。这是我的解决方案:

.gitconfig更改:

[github]name = <github username>email = <github email>[gitlab]name = <gitlab username>email = <gitlab email>[init]templatedir = ~/.git-templates[user]useConfigOnly = true

结帐后钩子应保存到以下路径:~/.git-templates/hooks/post-checkout

#!/usr/bin/env bash
# make regex matching below case insensitiveshopt -s nocasematch
# values in the services array should have a corresponding section in# .gitconfig where the 'name' and 'email' for that service are specifiedremote_url="$( git config --get --local remote.origin.url )"services=('github''gitlab')
set_local_user_config() {local service="${1}"local config="${2}"local service_config="$( git config --get ${service}.${config} )"local local_config="$( git config --get --local user.${config} )"
if [[ "${local_config}" != "${service_config}" ]]; thengit config --local "user.${config}" "${service_config}"echo "repo 'user.${config}' has been set to '${service_config}'"fi}
# if remote_url doesn't contain the any of the values in the services# array the user name and email will remain unset and the# user.useConfigOnly = true setting in .gitconfig will prompt for those# credentials and prevent commits until they are definedfor s in "${services[@]}"; doif [[ "${remote_url}" =~ "${s}" ]]; thenset_local_user_config "${s}" 'name'set_local_user_config "${s}" 'email'breakfidone

我对github和gitlab使用不同的凭据,但是上面代码中的这些引用可以被您使用的任何服务替换或增强。为了让结帐后挂钩在结帐后自动在本地设置存储库的用户名和电子邮件,确保服务名称出现在远程URL中,将其添加到post-checkout脚本中的服务数组中,并在您的.gitconfig中为其创建一个部分,其中包含您的用户名和该服务的电子邮件。

如果远程url中没有出现任何服务名称,或者存储库没有远程地址,则不会在本地设置用户名和电子邮件。在这些情况下,将启用user.useConfigOnly设置,在将用户名和电子邮件设置为存储库级别之前,将不允许您提交,并将提示用户配置该信息。

也许这是一个简单的黑客,但它很有用。只需像下面这样生成2个ssh密钥。

Generating public/private rsa key pair.Enter file in which to save the key (/Users/GowthamSai/.ssh/id_rsa): workEnter passphrase (empty for no passphrase):Enter same passphrase again:Your identification has been saved in damsn.Your public key has been saved in damsn.pub.The key fingerprint is:SHA256:CrsKDJWVVek5GTCqmq8/8RnwvAo1G6UOmQFbzddcoAY GowthamSai@Gowtham-MacBook-Air.localThe key's randomart image is:+---[RSA 4096]----+|. .oEo+=o+.      ||.o o+o.o=        ||o o o.o. +       || =.+ .  =        ||= *+.   S.       ||o*.++o .         ||=.oo.+.          || +. +.           ||.o=+.            |+----[SHA256]-----+

以同样的方式为个人创建一个。因此,您有两个ssh密钥,工作和公司。将work.pub,工作,personal.pub,个人复制到~/. ssh目录。

然后使用以下行创建一个外壳脚本,并将其命名为crev.sh(Company Reverse),内容如下。

cp ~/.ssh/work ~/.ssh/id_rsacp ~/.ssh/work.pub ~/.ssh/id_rsa.pub

以同样的方式,创建一个名为prev.sh(个人反向)的内容如下。

cp ~/.ssh/personal ~/.ssh/id_rsacp ~/.ssh/personal.pub ~/.ssh/id_rsa.pub

在~/. bashrc中为这些脚本添加别名,如下所示

alias crev="sh ~/.ssh/crev.sh"alias prev="sh ~/.ssh/prev.sh"source ~/.bashrc

无论何时你想使用公司,只要做crev,如果你想使用个人做prev:-p。

将这些ssh密钥添加到您的GitHub帐户。请确保之前没有生成id_rsa,因为这些脚本会覆盖id_rsa。如果您已经生成了id_rsa,请将其用于其中一个帐户。将它们复制为个人密钥并跳过个人密钥的生成。

git别名(和git配置中的部分)来救援!

添加别名(从命令行):

git config --global alias.identity '! git config user.name "$(git config user.$1.name)"; git config user.email "$(git config user.$1.email)"; :'

然后,设置,例如

git config --global user.github.name "your github username"git config --global user.github.email your@github.email

在新的或克隆的存储库中,您可以运行以下命令:

git identity github

此解决方案不是自动的,但在全局~/.gitconfig中取消设置用户和电子邮件并将user.useConfigOnly设置为true将强制git提醒您在每个新的或克隆的存储库中手动设置它们。

git config --global --unset user.namegit config --global --unset user.emailgit config --global user.useConfigOnly true

从git2.13开始,可以使用新引入的条件包括来解决这个问题。

举个例子:

全局配置~/. gitconfig配置文档

[user]name = John Doeemail = john@doe.tld
[includeIf "gitdir:~/work/"]path = ~/work/.gitconfig

工作特定配置工作流配置

[user]email = john.doe@company.tld

请记住,[includeIf...]应该在顶部的默认[user]之后。

使用Git 2.13中的条件包括,现在可以在一台机器上共存多个用户/电子邮件,只需很少的工作。

user.gitconfig有我的个人姓名和电子邮件。work-user.gitconfig有我的工作名称和电子邮件。两个文件都在~路径。

所以我的个人姓名/电子邮件默认适用。对于c:/work/ dir,应用我的工作名称/电子邮件。对于c:/work/github/ dir,应用我的个人姓名/电子邮件。这适用于应用最后一个设置。

# ~/.gitconfig[include]path = user.gitconfig[includeIf "gitdir/i:c:/work/"]path = work-user.gitconfig[includeIf "gitdir/i:c:/work/github/"]path = user.gitconfig

gitdir区分大小写,gitdir/i不区分大小写。

"gitdir/i:github/"将为其路径中具有github的任何目录应用条件包含。

类似于Rob W的回答,但允许不同的ssh密钥,并适用于较旧的git版本(例如没有core.ssh命令配置)。

我创建了文件~/bin/git_poweruser,具有可执行权限,并在PATH中:

#!/bin/bash
TMPDIR=$(mktemp -d)trap 'rm -rf "$TMPDIR"' EXIT
cat > $TMPDIR/ssh << 'EOF'#!/bin/bashssh -i $HOME/.ssh/poweruserprivatekey $@EOF
chmod +x $TMPDIR/sshexport GIT_SSH=$TMPDIR/ssh
git -c user.name="Power User name" -c user.email="power@user.email" $@

每当我想以“高级用户”的身份提交或推送某些内容时,我都会使用git_poweruser而不是git。它应该适用于任何目录,并且不需要在.gitconfig.ssh/config中进行更改,至少不需要在我的目录中进行更改。

我做了一个bash函数来处理它。这里是GitHub仓库

供记录:

# Look for closest .gitconfig file in parent directories# This file will be used as main .gitconfig file.function __recursive_gitconfig_git {gitconfig_file=$(__recursive_gitconfig_closest)if [ "$gitconfig_file" != '' ]; thenhome="$(dirname $gitconfig_file)/"HOME=$home /usr/bin/git "$@"else/usr/bin/git "$@"fi}
# Look for closest .gitconfig file in parents directoriesfunction __recursive_gitconfig_closest {slashes=${PWD//[^\/]/}directory="$PWD"for (( n=${#slashes}; n>0; --n ))dotest -e "$directory/.gitconfig" && echo "$directory/.gitconfig" && returndirectory="$directory/.."done}

alias git='__recursive_gitconfig_git'

以下是阅读许多答案后的完整步骤

如何为不同的github帐户设置多个SSH密钥设置

您可能需要开始检查当前保存的密钥

$ ssh-add -l

如果您决定删除(可选的,小心这个)之前的所有缓存密钥

$ ssh-add -D

然后,您可以创建一个链接到您希望/需要使用的每个电子邮件/帐户的ssh pub/priv密钥

$ cd ~/.ssh$ ssh-keygen -t rsa -C "work@company.com" <-- save it as "id_rsa_work"$ ssh-keygen -t rsa -C "pers@email.com" <-- save it as "id_rsa_pers"

执行此命令后,您将创建以下文件

~/.ssh/id_rsa_work~/.ssh/id_rsa_work.pub
~/.ssh/id_rsa_pers~/.ssh/id_rsa_pers.pub

确保认证代理正在运行

$ eval `ssh-agent -s`

添加生成的密钥如下(来自~/. ssh文件夹)

$ ssh-add id_rsa_work$ ssh-add id_rsa_pers

现在您可以再次检查保存的密钥

$ ssh-add -l

现在您需要将生成的公钥添加到您的github/bickbuket服务器Acces Keys

将每个repos克隆到不同的文件夹

转到用户工作将工作的文件夹并执行此操作

$ git config user.name "Working Hard"$ git config user.email "work@company.com"

只是为了看看这是什么检查“. git/config”的内容

转到用户per将工作的文件夹并执行此操作

$ git config user.name "Personal Account"$ git config user.email "pers@email.com"

只是为了看看这是什么检查“. git/config”的内容

之后这一切您将能够提交您的个人和工作代码只需切换这两个文件夹之间

如果您使用Git Bash并需要在Windows下生成ssh密钥,请按照以下步骤操作:

https://support.automaticsync.com/hc/en-us/articles/202357115-Generating-an-SSH-Key-on-Windows

虽然大多数问题都回答了OP,但我只需要自己完成这个,甚至没有谷歌搜索,我就能够找到最快、最简单的解决方案。这是简单的步骤:

  • 从其他存储库复制现有的.gitconfg
  • 粘贴到您新添加的repo中
  • 更改.gitconfig文件中的值,例如名称、电子邮件和用户名[用户]name=约翰电子邮件=john@email.net用户名
  • 将文件名添加到.gitignore列表,以确保您不会将.gitconfig文件提交到您的工作存储库

只需将其添加到您的~/。bash_profile在默认键之间切换github.com

# Git SSH keys swapalias work_git="ssh-add -D  && ssh-add -K ~/.ssh/id_rsa_work"alias personal_git="ssh-add -D && ssh-add -K ~/.ssh/id_rsa"

您还可以在要以不同用户身份提交的存储库中执行提交时使用git commit --author "Your Name <your@email.com>"

可以有多种方法来做到这一点,但我通过下面的shell函数来实现这一点。

function gitprofile() {if [[ $1 == "private" ]]; thenif grep -q "tom@workmail.com" "/Users/tomtaylor/.gitconfig"; thenecho "Found in gitconfig. No action required."elseecho "Found in gitconfig1"cp /Users/tomtaylor/.gitconfig /Users/tomtaylor/.gitconfig2mv /Users/tomtaylor/.gitconfig1 /Users/tomtaylor/.gitconfigmv /Users/tomtaylor/.gitconfig2 /Users/tomtaylor/.gitconfig1fielif [[ $1 == "public" ]]; thenif grep -q "tom@gmail.com" "/Users/tomtaylor/.gitconfig"; thenecho "Found in gitconfig. No action required."elseecho "Found in gitconfig1"cp /Users/tomtaylor/.gitconfig /Users/tomtaylor/.gitconfig2mv /Users/tomtaylor/.gitconfig1 /Users/tomtaylor/.gitconfigmv /Users/tomtaylor/.gitconfig2 /Users/tomtaylor/.gitconfig1fi}

就像,

gitProfile"public"->这将切换到配置文件tom@gmail.com

GitProfile"Private"->这将切换到tom@workmail.com

根据您当前的终端首选项将此函数添加到您的~/.bash_profile或~/. zshrc。重新启动终端或只需编译脚本,如

.~/.bash_profile

使功能更有效。希望有帮助!

让我们重新定义规格-你只是想能够使用多个身份与git对不同的组织-所有你需要的是2个oneliner:

 # generate a new private public key pair for org1email=me@org1.eu;ssh-keygen -t rsa -b 4096 -C $email -f $HOME/.ssh/id_rsa.$email
# use org1 auth in THIS shell session - Ctrl + R, type org1 in new oneemail=me@org1.eu;export GIT_SSH_COMMAND="ssh -p 22 -i ~/.ssh/id_rsa.$email"

为什么我知道这是迄今为止最简单的解决方案:

  # me using 9 different orgs with separate git auths dynamicallyfind $HOME/.ssh/id_rsa.*@* | wc -l18

在阅读了所有答案之后,这就是我的解决方案:

场景:

  • 本地操作系统:Linux(bash)
  • GitHub上的两个帐户(工作/个人)
  • 使用不同密钥的ssh访问
  • 我的工作帐户将是“主”帐户(因此它不需要自定义配置)

配置:

  1. 设置一个“假”主机,它允许我选择正确的SSH密钥对。
    ~/.ssh/config
    # Personal GitHub accountHost github-personalHostName github.comUser gitIdentityFile ~/.ssh/id_rsa_personalIdentitiesOnly yes
  2. “告诉” git它应该在给定的目录子树中使用自定义配置:
    ~/.gitconfig
    # My personal projects[includeIf "gitdir/i:~/REPOS/PERSONAL/"]path = ~/REPOS/PERSONAL/personal.gitconfig
    
  3. 最后,我的配置在~/REPOS/PERSONAL/personal.gitconfig
    # gitconfig for personal projects[user]email = personalemail@example.com
    [url "git@github-personal"]insteadOf = git@github.com

一旦上述三个到位,我可以像这样克隆个人repo:

user@host:~/REPOS/PERSONAL$ git clone git@github.com:jmnavarrol/python-multigit.gitCloning in 'python-multigit'...(...)user@host:~/REPOS/PERSONAL$ cd python-multigit && git remote -vorigin  git@github-personal:jmnavarrol/python-multigit.git (fetch)origin  git@github-personal:jmnavarrol/python-multigit.git (push)user@host:~/REPOS/PERSONAL/python-multigit$

~/REPOS/PERSONAL/personal.gitconfig添加url重写…

[url "git@github-personal"]insteadOf = git@github.com

…是什么让我引用存储库只是通过它的“标准” URL在脚本,subrepos(即python-multigit本身的情况下-是的,跛脚的尝试有点自运营)没有使用“错误” URL的风险,因此,错误的身份验证。

我的两分钱。

在执行以下步骤之前,您必须有多个ssh密钥。这些可以使用这里命令生成

步骤

  1. 转到 c:\users\Your User\.ssh
  2. 触控配置
  3. 配置每个域的ssh密钥

config file

  1. 使用gitbash转到git repo。
  2. 配置每个存储库的用户名和名称"git config user.email="abc@gmail.com"
  3. 配置每个存储库的名称。git config user.name="Mo Sh"
  4. 执行git命令。它会自动选择SSH键。