~/.gitconfig
中,我在[user]
下列出了我的个人电子邮件地址,因为这就是我要用于Github存储库的原因。我公司的git repo允许我进行提交,但是当它发出新变更集的公告时,它说它们来自匿名,因为它无法识别我的.gitconfig
中的电子邮件地址-至少,这是我的理论。是否可以在
[user]
中指定多个.gitconfig
定义?还是有其他方法可以覆盖某个目录的默认.gitconfig
?就我而言,我检查了~/worksrc/
中的所有工作代码-是否有一种方法只能为该目录(及其子目录)指定.gitconfig
?#1 楼
您可以将单个存储库配置为使用覆盖全局配置的特定用户/电子邮件地址。从仓库的根目录运行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文件中查看这些设置的效果
– Abizern
2010-11-18 23:15
您可以使用git config --edit和git config --global --edit手动编辑这些配置文件。如果您错过了Abizern的评论,则存储库的配置文件位于
–罗里·奥凯恩(Rory O'Kane)
2012年4月25日在20:01
您还应该取消设置GIT_AUTHOR_EMAIL和GIT_COMMITTER_EMAIL(和* _NAME),因为它们将覆盖本地设置
–非循环
2012年9月14日上午9:58
有没有办法针对给定文件夹中的所有存储库而不是单个存储库执行此操作?在这里看到我的问题:stackoverflow.com/questions/21307793/…
– scubbo
2014年1月23日12:13
有关今天发布的Git 2.13的最新解决方案,请参见下面的答案。
– tejasbubane
17年5月10日在11:20
#2 楼
从git 2.13开始,可以使用新引入的条件包含解决此问题。示例:
全局配置〜/ .gitconfig
工作特定的配置〜/ work / .gitconfig
[user]
name = John Doe
email = john@doe.tld
[includeIf "gitdir:~/work/"]
path = ~/work/.gitconfig
评论
鉴于git 2.13已发布,这是最好的答案。
– tejasbubane
17年5月10日在11:18
@Gary是的,根据我的经验和文档:“如果模式以/结尾,则会自动添加**。例如,模式foo /变为foo / **。换句话说,它与“ foo”及其内部的所有内容递归匹配。包括$ HOME / to / group内的所有存储库[includeIf“ gitdir:〜/ to / group /”]”
–TomášJanoušek
17年6月30日在21:38
gitdir应该包含最后一个“ /”。
–任志刚
17 Sep 15'1:42
不要用$ HOME替换〜,因为git会按照以下说明为您扩展它:git-scm.com/docs/git-config#git-config-pathname
– MCMZL
19年3月6日在9:10
您可以通过在其他目录中运行git config --list来检查它是否可以递归运行。在〜/ work /包含git存储库的子目录中,includeIf生效。请注意,在〜/ work /的子目录中,其中不包含git存储库,将不执行includeIf。
–NZD
19年4月25日在21:05
#3 楼
或者,您可以在本地.git/config
文件中添加以下信息[user]
name = Your Name
email = your.email@gmail.com
评论
...这是手动执行@discomurray建议的命令为您执行的操作的方式。
–user456584
2014年7月10日在21:15
每个遥控器是否可以添加多行?
–阿贝尔·卡雷霍(Abel Callejo)
17年7月14日在0:22
#4 楼
一个命令github account switch此解决方案采用单个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 / Bitbucket帐户
复制默认公共密钥
pbcopy < ~/.ssh/id_rsa.pub
登录到GitHub帐户
将密钥粘贴到
add SSH key
github页面中其他帐户步骤1.自动ssh密钥切换。我们可以根据
pbcopy < ~/.ssh/id_rsa_pro.pub
配置ssh
发送使用特定加密密钥的用户。令人高兴的是,您可以为同一个host
使用多个别名。请参见以下示例
hostname
文件:# Default GitHub
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa
# Professional github alias
Host github_pro
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_pro
git远程配置
现在可以在git中使用这些别名通过将
~/.ssh/config
更改为git@github.com
来更改遥控器。您可以更改现有的项目遥控器(使用类似
git@github_pro
的东西),也可以在克隆它们时直接对其进行修改。 /> git remote set-url origin git@github_pro:foo/bar.git
步骤2。更改git user.email
Git配置设置可以是全局或每个项目。在我们的情况下,我们需要每个项目的设置。更改它非常容易:
git clone git@github.com:ArnaudRinquin/atom-zentabs.git
虽然这很容易,但对于我们这样的开发人员来说,这需要很长时间。我们可以为此编写一个非常简单的git别名。
我们将其添加到
git clone git@github_pro:ArnaudRinquin/atom-zentabs.git
文件中。git config user.email 'arnaud.rinquin@wopata.com'
然后,我们要做的就是
~/.gitconfig
来更改电子邮件第3步。请切换一个命令吗?!
用一个无参数命令从默认帐户切换到指定帐户是否很好?这绝对是可能的。此命令将分两个步骤:
将当前项目的远程对象更改为所选的别名
更改当前的项目用户。电子邮件配置
我们已经为第二步提供了一个命令解决方案,但是第一步变得更加困难。 :
[user]
name = Arnaud Rinquin
email = rinquin.arnaud@gmail.com
...
[alias]
setpromail = "config user.email 'arnaud.rinquin@wopata.com'"
这允许将所有远程从一台主机更改为另一台主机(别名)。参见示例:
[alias]
changeremotehost = !sh -c \"git remote -v | grep '.*fetch' | sed s/..fetch.// | sed s/// | xargs git remote set-url\"
将它们全部合并
我们现在只需要将两个命令组合为一个,这很容易。了解我还如何集成位桶式主机交换。
$ > git remote -v
origin 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 -v
origin git@github_pro:ArnaudRinquin/arnaudrinquin.github.io.git (fetch)
origin git@github_pro:ArnaudRinquin/arnaudrinquin.github.io.git (push)
源链接-Github
源链接-教程
评论
太好了,谢谢。我在每封电子邮件中使用一堆回购协议,因此我的setpromail别名改为使用config --global(并且我还有其他用于设置不同电子邮件地址的别名)。有用!
– michel-slm
16年6月8日在17:08
对于这两个不同的帐户,我该如何使用不同的gpg密钥进行签名?我有2个github帐户的2个gpg密钥,并希望以不同的方式签名。 “ git配置--global user.signingkey xxxx”
–哈基坎语
18年4月6日在8:09
这个答案很棒。我几乎没有读过它,因为我以为我从其他答案中找到了答案。绝对值得更多投票。 PS。与其他答案中的useConfigOnly = true结合使用时,效果会更好。
–steinybot
18年6月14日在21:13
不是IdentifyFile,而是IdenfityFile。
–基督徒
5月9日8:24
教程的链接不再有效。我在github.com/ArnaudRinquin/blog/blob/master/上找到了它
– Greymatter
6月25日1:20
#5 楼
从Orr Sella的博客中获得一些启发后,我编写了一个预提交钩子(位于~/.git/templates/hooks
中),该钩子将根据本地存储库./.git/config
中的信息来设置特定的用户名和电子邮件地址:必须将模板目录的路径放置到您的~/.gitconfig
中: 。如果要将钩子应用于已经存在的存储库,则只需在存储库中运行git init
即可对其进行初始化。这是我想出的钩子(它仍然需要进行一些抛光-建议是欢迎)。
将其另存为
[init]
templatedir = ~/.git/templates
或
~/.git/templates/hooks/pre_commit
并确保它可执行文件:
git clone
~/.git/templates/hooks/post-checkout
编辑:
所以我将钩子重写为Python中的钩子和命令。另外,也可以将脚本作为Git命令(
git commit
)调用。另外,还可以在配置文件(git init
)中定义任意数量的ID,这些ID可在提示符下选择。您可以在github.com上找到该项目:git-passport-一个用Python编写的Git命令和钩子,用于管理多个Git帐户/用户身份。评论
这个工作整齐。但是,通过使它成为签出后(而不是提交后)钩子,对我来说效果更好。我对改善此答案的建议是:1.将代码段保存为〜/ .git / templates / hooks / post-checkout并授予权限chmod + x post-checkout,2. git_remotes值是开头部分整个主机名,例如git@github.com,3.用户应将local_id值编辑为各自的名称和电子邮件地址。
– Shantannu Kumar
2014年12月24日在16:37
@ShantanuKumar感谢您的评论。我按照您的建议调整了答案。也许我会很快用Python重写脚本。
–碟
2014年12月29日下午16:41
增加了对正则表达式和不带遥控器的存储库的支持。为了方便下载,所有合并在这里。正则表达式可区分同一服务上不同项目的标识。并通过以下方式支持远程存储库如果您从Eclipse(无法处理交互式预提交触发器)的IDE中初始化新项目,则使用默认标识是有意义的
–cfi
15-10-27在12:57
#6 楼
通过Git 2.13中的条件包含,现在可以在很少的工作量下在一台计算机上共存多个用户/电子邮件。user.gitconfig
有我的工作名称和电子邮件。这两个文件都位于work-user.gitconfig
路径。所以我的个人名称/电子邮件默认情况下适用。对于
~
目录,将应用我的工作名称/电子邮件。对于c:/work/
目录,将应用我的个人名称/电子邮件。这适用于应用最后一个设置的情况。在路径中带有c:/work/github/
的任何目录的条件包含。评论
尽管您的回答受到了赞赏,但好的TomášJanoušek还是比您晚了20天。请考虑删除此答案。
–对冲
17年9月15日在17:03
@Hedge是的,我赞成他的回答,但是花了我一些时间才能在Windows上进行配置,而gitdir / i帮助了我(他的回答没有提及)。
–欢乐
17年9月15日在21:44
@hIpPy实现此问题的特殊方式直接适用于我的用例,使它比Tomas的回答容易得多。我都赞成。
–艾萨克·亚当斯(Isaac Adams)
4月3日21:38
#7 楼
如果您不想使用默认电子邮件地址(电子邮件地址链接到github用户),则可以配置要询问的身份。如何做到这一点取决于您使用的git版本,请参见下文。(预期)缺点是必须为每个存储库配置一次电子邮件地址(和名称)。因此,您不能忘记这样做。
版本<2.7.0
[user]
name = Your name
email = "(none)"
在全局配置
~/.gitconfig
中,如注释Dan Aloni在Orr Sella的博客文章中。尝试在存储库中进行第一次提交时,git失败,并显示一条漂亮消息: (该消息并不完全正确)。2.7.0≤版本<2.8.0
版本2.7.0中的行为不是预期的,并已用2.7修复。 0。您仍然可以按照Orr Sella的博客文章中所述使用预提交挂钩。此解决方案也适用于其他版本,但其他解决方案不适用于该版本。
版本≥2.8.0
Dan Aloni添加了实现该行为的选项(请参阅发行版)笔记)。配合使用:
*** 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)')
要使其正常工作,您可能不能在全局配置中提供名称或电子邮件地址。然后,在第一次提交时,您会收到一条错误消息
[user]
useConfigOnly = true
所以该消息不是很有启发性,但是由于您显式设置了该选项,因此您应该知道做。与版本低于2.7.0的解决方案相比,您始终必须手动设置名称和电子邮件。
评论
我使用这种方法几个月了,效果很好。我有多个电子邮件地址(个人,工作),并且我不想在全局gitconfig中配置一个“默认”地址。使用特殊值“(none)”时,git会在每次启动新存储库时提示我提供一个有效地址,而不是根据用户名和主机名猜测一个(很烦人,我需要对其进行修改)。但是,最近使用Git的升级版本(2.7.0,可能更早),我发现特殊值“(无)”不再触发致命错误。相反,它将按原样使用“ John Doe <(none)>”。
–魏卓云
16年2月2日在13:11
@wzyboy:哦,你是对的。我使用git bisect来发现commit 19ce497c ...引入了此行为。但是,与版本(2.5-2.7)无关,我可以在配置中使用email =(不带参数),并且在旧版本中它表现出与email =“(none)”相同的行为。你能确认吗?如果是这样,我将编辑答案。我只是怀疑,因为它是如此明显,而且我以前从未使用过。
–约翰
16-2-3在17:17
我在2.7.0中尝试使用email =,Git仍然根据用户名和主机名猜测电子邮件地址。现在,我在Sella的博客中使用预提交方法。我还通知了Dan Aloni,他在Sella的帖子中提出了“(无)”想法,他提出了一个补丁,以正式将其实现为功能:permalink.gmane.org/gmane.comp.version-control.git/ 285301
–魏卓云
16-2-4在3:25
从git-2.8开始:“ user.useConfigOnly”配置变量可用于强制用户始终设置user.email和user.name github.com/git/git/blob/master/Documentation/RelNotes/2.8.0。文本文件
– rofrol
16-3-29在13:33
@rofrol感谢您的信息。我相应地更新了我的答案。
–约翰
16-3-29在16:12
#8 楼
让
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.email
name@example.com
除了别名,您还可以在
git
中放入自定义的$PATH
可执行文件。 #!/bin/sh
/usr/bin/git -c user.name="Your name" -c user.email="name@example.com" "$@"
与特定于存储库的
.git/config
相比,这些方法的优势在于,它适用于每个git
存储库自定义git
程序处于活动状态。这样,您可以轻松地在用户/名称之间切换,而无需修改任何(共享)配置。#9 楼
git别名(以及git configs中的部分)可以解救!添加别名(从命令行): ,例如
git config --global alias.identity '! git config user.name "$(git config user..name)"; git config user.email "$(git config user..email)"; :'
,在新的或克隆的仓库中,您可以运行以下命令:
git config --global user.github.name "your github username"
git config --global user.github.email your@github.email
此解决方案不是自动的,但是在全局
~/.gitconfig
中取消设置用户和电子邮件并将user.useConfigOnly
设置为true
会迫使git提醒您在每个新的或克隆的存储库中手动设置它们。 >评论
我喜欢您的解决方案;但是,当我取消全局设置时,它只是使用计算机的主机名进行提交,而不是让git提醒我在任何给定的存储库中设置它们:(
– ENG618
17年6月20日在14:59
#10 楼
这个答案部分地受到@Saucier的帖子的启发,但是我一直在寻找一种自动的方法来基于远程基于每个回购设置user.name
和user.email
,这比git-passport软件包的重量轻一点。他发展了。还要向@John发送h的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 insensitive
shopt -s nocasematch
# values in the services array should have a corresponding section in
# .gitconfig where the 'name' and 'email' for that service are specified
remote_url="$( git config --get --local remote.origin.url )"
services=(
'github'
'gitlab'
)
set_local_user_config() {
local service=""
local config=""
local service_config="$( git config --get ${service}.${config} )"
local local_config="$( git config --get --local user.${config} )"
if [[ "${local_config}" != "${service_config}" ]]; then
git 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 defined
for s in "${services[@]}"; do
if [[ "${remote_url}" =~ "${s}" ]]; then
set_local_user_config "${s}" 'name'
set_local_user_config "${s}" 'email'
break
fi
done
我为github和gitlab使用了不同的凭据,但是上面代码中的那些引用可能是用您使用的任何服务替换或扩充。为了使结帐后挂钩在结帐后自动在本地为回购设置用户名和电子邮件,请确保服务名称出现在远程URL中,将其添加到
post-checkout
脚本中的服务数组中并为其创建一个部分在您的.gitconfig
中,其中包含您的用户名和该服务的电子邮件。 如果任何服务名称都没有出现在远程URL中,或者存储库没有远程,则用户名和电子邮件将不会在本地设置。在这种情况下,将使用
user.useConfigOnly
设置,直到在回购级别设置了用户名和电子邮件后,您才可以提交提交,并提示用户配置该信息。评论
很好的解决方案。不要忘记使用chmod 755钩子脚本。否则,它将被复制但不会执行。
–onekiloparsec
17年4月11日在15:41
#11 楼
这是在这里阅读许多答案之后的完整步骤如何为不同的github帐户设置多个SSH密钥设置
您可能想开始检查当前保存的密钥
$ ssh-add -l
如果您决定先删除所有缓存的密钥(可选,请谨慎操作)
$ ssh-add -D
然后可以创建链接到您希望/需要使用的每个电子邮件/帐户的ssh发布/私钥。
$ 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
将每个存储库克隆到不同的文件夹中
o用户工作将在其中工作的文件夹并执行此操作
$ git config user.name "Working Hard"
$ git config user.email "work@company.com"
只是看看它在做什么检查“ .git / config”的内容
转到用户将要使用的文件夹并执行此
“
毕竟,您只需在这两个文件夹之间切换就可以提交个人和工作代码。
如果您使用的是Git Bash并且需要生成ssh Windows下的密钥请按照以下步骤操作:
https://support.automaticsync.com/hc/en-us/articles/202357115-Generating-an-SSH-Key-on-Windows
#12 楼
有一个简单的解决方案似乎可以很好地避免错误。只需从
[user]
中删除~/.gitconfig
部分,这将防止您在未为每个存储库设置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 repo中重复配置
–含蓄
4月10日19:42
#13 楼
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 config中的Shell变量扩展
#14 楼
Windows环境如果已将其安装在系统中,则可以从
Git Extensions --> Settings --> Global Settings
进行修改。 Windows环境中的文件夹/目录上以访问这些设置。评论
如何解决多个用户,而不仅仅是编辑他们?
–user241244
18年2月14日在21:44
@D_N更新了新的屏幕截图,其中包含用于切换设置的选项。
– Abhijeet
18年2月15日在10:15
打开本地存储库文件夹,然后从导航菜单中选择git-config,然后单击本地存储库选项卡,内容将被应用到$ local_repo_path / .git / config上面的答案。
– maxwu
18年5月12日在12:37
#15 楼
也许这是一个简单的技巧,但它很有用。只需生成两个如下所示的ssh密钥即可。因此,您有2个SSH密钥,工作和公司。将work.pub,work,personal.pub,personal复制到〜/ .ssh /目录。
然后用以下几行创建一个shell脚本,并将其命名为crev.sh(公司反向),其内容如下。
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/GowthamSai/.ssh/id_rsa): work
Enter 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.local
The key's randomart image is:
+---[RSA 4096]----+
|. .oEo+=o+. |
|.o o+o.o= |
|o o o.o. + |
| =.+ . = |
|= *+. S. |
|o*.++o . |
|=.oo.+. |
| +. +. |
|.o=+. |
+----[SHA256]-----+
以相同的方式,使用以下内容创建另一个称为prev.sh(个人反向)的内容。
cp ~/.ssh/work ~/.ssh/id_rsa
cp ~/.ssh/work.pub ~/.ssh/id_rsa.pub
在〜/ .bashrc中为以下脚本添加别名
cp ~/.ssh/personal ~/.ssh/id_rsa
cp ~/.ssh/personal.pub ~/.ssh/id_rsa.pub
无论何时使用公司,只要做一点,如果您想使用个人做prev :-p。
将这些ssh密钥添加到您的GitHub帐户中。确保您之前没有生成id_rsa,因为这些脚本将覆盖id_rsa。如果您已经生成了id_rsa,请将其用于其中一个帐户。将它们复制为个人,并跳过个人密钥的生成。
#16 楼
我做了一个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" != '' ]; then
home="$(dirname $gitconfig_file)/"
HOME=$home /usr/bin/git "$@"
else
/usr/bin/git "$@"
fi
}
# Look for closest .gitconfig file in parents directories
function __recursive_gitconfig_closest {
slashes=${PWD//[^\/]/}
directory="$PWD"
for (( n=${#slashes}; n>0; --n ))
do
test -e "$directory/.gitconfig" && echo "$directory/.gitconfig" && return
directory="$directory/.."
done
}
alias git='__recursive_gitconfig_git'
#17 楼
尽管大多数问题都回答了OP的问题,但我只需要自己仔细检查一下,甚至不用谷歌搜索就能找到最快,最简单的解决方案。简单的步骤如下:从其他仓库中复制现有的
.gitconfg
粘贴到
.gitconfig
文件中新添加的仓库中更改值,例如名称,电子邮件和用户名
[user]
name = John
email = john@email.net
username = john133
将文件名添加到
.gitignore
列表中,以确保您不将.gitconfig
文件提交到工作仓库中。#18 楼
您还可以在要作为其他用户提交的回购中提交时使用git commit --author "Your Name <your@email.com>"
。#19 楼
类似于Rob W的答案,但允许使用不同的ssh键,并且可以与较旧的git版本一起使用(例如没有core.sshCommand配置)。权限,并在PATH中:#!/bin/bash
TMPDIR=$(mktemp -d)
trap 'rm -rf "$TMPDIR"' EXIT
cat > $TMPDIR/ssh << 'EOF'
#!/bin/bash
ssh -i $HOME/.ssh/poweruserprivatekey $@
EOF
chmod +x $TMPDIR/ssh
export GIT_SSH=$TMPDIR/ssh
git -c user.name="Power User name" -c user.email="power@user.email" $@
每当我想以“超级用户”身份提交或推送内容时,我都使用
~/bin/git_poweruser
而不是git_poweruser
。它应该可以在任何目录上运行,并且不需要更改git
或.gitconfig
,至少不需要更改我的目录。#20 楼
只需将其添加到〜/ .bash_profile中,即可在github.com的默认密钥之间切换# Git SSH keys swap
alias 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-config#FILES。我很惊讶您的公司服务器会做到这一点-它必须更改您的承诺才能发挥作用。如果您提交本地结帐,您会看到什么用户名?
@Alex:忘记了那里的重要信息-它很可能只是电子邮件通知中的名字,而实际上没有更改提交内容。
您可以使用git-hook自动执行此重复工作:github.com/DrVanScott/git-clone-init
请接受以下答案:stackoverflow.com/a/43654115/482899。这是git 2.13以来的最佳解决方案。