根据这篇 Stack Overflow 的帖子和相关指南,我设置了以下的条件配置...
$ cat ~/.gitconfig
[user]
name = Random J. Hacker
email = RandomJ@hack.er
[includeIf "gitdir:~/work/*"]
path = ~/work/.gitconfig
$ cat ~/work/.gitconfig
[user]
name = Serious Q. Programmer
email = serious.q@programmer.biz
在这种方式下,当我为程序员公司工作时克隆的所有存储库都会将我的@programmer.biz工作电子邮件地址指定为默认的--author
凭据;而我在桌面、/tmp
、~/.vscode
或其他任何地方克隆的每个随机存储库都会分配我的超级合法的@hack.er凭据作为作者。不幸的是,我注意到以下行为...$ git clone git@github.com:programmerbiz/repo.git
$ cd repo/
$ git config --list | grep user
user.name=Random J. Hacker
user.email=RandomJ@hack.er
user.name=Serious Q. Programmer
user.email=serious.q@programmer.biz
哦不!我的@hack.er用户被商业仓库选中了!
我想自动配置所有存储库的一个且仅一个默认[user]
,而不需要使用bash脚本。在~/.gitconfig
中是否有includeIf.Not
运算符、[else]
块语法或类似语法可用于实现此目的呢?根据条件包含文档,似乎不支持这种用例。
[user]
部分加上else语句,然后再加上一个includeif部分来处理特定的部分,在Windows上似乎可以工作。 - Lasse V. Karlsen@fun.times
,然后跟随includeIf
,仅在适用时覆盖名称和电子邮件吗?“否则”将隐含在前面的全局设置中。实际上,这正是@Lasse上面建议的。 - joanisgit config --list
中也获得了双倍凭证,但当我执行git commit
时,它使用了正确的凭证。 对我来说,似乎后面的出现覆盖了前面的,即使git config --list
仍然列出了它们两个。 - joanisgit log
显示的最后作者也是对我进行粗略测试的结果。鉴于存在多作者提交[1] [2],我不想让缓存的凭据“闲置”,并且希望它不会被一些不应该看到它的进程捡起来。 - Peter Vandiviergit log --format=raw
命令来确认它是安全的:根据git log --help
的说明,“raw” 格式会完整地显示提交对象中存储的所有提交信息。在我这边,当你重现了你的场景后,我只能在work
文件夹下的测试提交中看到 “work” 身份。 - joanis