Git 使用了错误的标识(.ssh/config 文件未读?)

Git uses the wrong identity (.ssh/config file not read ?)

我在公司工作时使用 gitlab.com,在个人工作中使用 github.com。 我已经阅读了很多主题,很多关于身份问题的主题,但我仍然无法理解为什么它对我不起作用。

我有一个 ~/.ssh/config 文件如下

Host github.com
  HostName github.com
  User git
  IdentityFile ~/.ssh/perso_id_rsa

Host gitlab
  HostName gitlab.com
  User git
  IdentityFile ~/.ssh/id_rsa

还有大师~/.gitconfig

[user]
    email = my_company_address
    name = my_company_name

[includeIf "gitdir:~/Workspace/perso"]
    path = ~/Workspace/perso/.gitconfig

还有一个~/Workspace/perso/.gitconfig

[user]
    email = my_perso_email
    name = my_pseudo

当我在 ~/Workspace/perso/my_perso_project 中从我的个人项目进行提交时,提交作者是我的公司地址(提交被毫无问题地推送到 github)。

有人可以帮忙吗?

谢谢

IncludeIf 确实支持 Git 2.17.1 (it was introduced in 2.13)

如评论所述,~/.ssh/config 仅用于身份验证,不用于作者身份。

我会去 ~/Workspace/perso/my_perso_projec 做:

git config --list --show-origin

这样,您就知道哪个文件将设置 user.email
最后显示的将覆盖其他。

你的includeif是错误的。 gitdir:~/Workspace/perso 不是 .git 目录,并且没有搜索标志。请参阅 git config 文档了解 includeif,

If the pattern ends with /, ** will be automatically added. For example, the pattern foo/ becomes foo/**. In other words, it matches "foo" and everything inside, recursively.

要么命名您正在检查的特定 git 目录,要么告诉 Git 您指的是整个子树中的任何 git 目录:

[includeIf "gitdir:~/Workspace/perso/.git"]
        path = ~/Workspace/perso/.gitconfig

[includeIf "gitdir:~/Workspace/perso/**"]
        path = ~/Workspace/perso/.gitconfig

[includeIf "gitdir:~/Workspace/perso/"]
        path = ~/Workspace/perso/.gitconfig