我的 HOMEDIR 中有一个默认的全局
~/.gitconfig
文件,其中包含以下内容:
[includeIf "gitdir:/mnt/c/Users/myname/Documents/work/github"]
path = /mnt/c/Users/myname/.gitconfig-github
[includeIf "gitdir:/mnt/c/Users/myname/Documents/work/gitlab"]
path = /mnt/c/Users/myname/.gitconfig-gitlab
[init]
defaultBranch = main
我还有 2 个以上在全局中引用的配置文件
.gitconfig
,这些位于我的主要工作位置(不是 HOMEDIR)。
这是
.gitconfig-github
文件的一个示例:
[gpg]
format = ssh
[commit]
gpgsign = true
[user]
name = mygithubname
username = mygithubusername
email = mygithubemai[email protected]
signingkey = /mnt/c/Users/myname/.ssh/id_rsa.pub
当我在全球
~/.gitconfig
的某个 DIR 中工作时,例如。 /mnt/c/Users/myname/Documents/work/github
它应该使用适当的引用配置以及配置中的用户名和电子邮件,但事实并非如此。
如果我跑步:
git config --list
我得到这个:
includeif.gitdir:/mnt/c/Users/myname/Documents/work/github.path=/mnt/c/Users/myname/.gitconfig-github
includeif.gitdir:/mnt/c/Users/myname/Documents/work/gitlab.path=/mnt/c/Users/myname/.gitconfig-gitlab
init.defaultbranch=main
然后如果我跑步:
git config user.name
我应该根据我所在的目录(gitlab 或 github)取回用户名。相反,我得到了“空白”回报。如果我位于正确的目录中,它应该使用我在全局配置中引用的两个配置文件中的一个。 尽管找到了多个指南,但这就是实现此目的的方法。这是行不通的。当我运行 git 克隆时,git 总是询问我的用户名和密码。
我们中的许多人在多个平台上拥有多个帐户。那么正确的方法是什么?
gitdir:
行必须以
.git
结尾,因此全局 .gitconfig 文件应如下所示:[includeIf "gitdir:/mnt/c/Users/myname/Documents/work/github/**/.git"]
path = /mnt/c/Users/myname/.gitconfig-github
[includeIf "gitdir:/mnt/c/Users/myname/Documents/work/gitlab/**/.git"]
path = /mnt/c/Users/myname/.gitconfig-gitlab
[init]
defaultBranch = main
此外,通过添加 glob
/**/
,我可以覆盖例如中的任何 git 存储库。
.../gitlab/myrepo1
我现在在 git repo 文件夹中得到正确的响应:
git config -l
includeif.gitdir:/mnt/c/Users/myname/Documents/work/github/**/.git.path=/mnt/c/Users/myname/.gitconfig-github
includeif.gitdir:/mnt/c/Users/myname/Documents/work/gitlab/**/.git.path=/mnt/c/Users/myname/.gitconfig-gitlab
gpg.format=ssh
commit.gpgsign=true
user.name=mygithubname
user.username=mygithubusername
[email protected]