Git - includeIf hasconfig:远程.*.url不工作

ca1c2owp  于 2023-03-11  发布在  Git
关注(0)|答案(2)|浏览(118)

我想在同一台电脑上使用两个不同的GitHub账户,所以我为它们都设置了ssh密钥。两个账户都运行良好。我不想在每次创建新的repo时都配置邮箱和名字,所以我四处查看了一下,发现了git的“includeIf”部分。
我使用的是git版本2.37.3
这些是我现在的配置文件。
~/.gitconfig文件

[user]
    email = "home@example.com"
    name = "Home"

[includeIf "hasconfig:remote.*.url:git@github.com-Work:*/**"]
    email = "work@example.com"
    name = "Work"

~/.ssh/配置

Host github.com-Home
  HostName github.com
  User git
  IdentityFile ~/.ssh/Home

Host github.com-Work
  HostName github.com
  User git
  IdentityFile ~/.ssh/Work

当我克隆像git clone git@github.com-Home:Home/repo.git这样的存储库并在存储库中运行git config user.name时,我得到了预期的输出Home
但是,当我为我的工作帐户克隆一个repo(如git clone git@github.com-Work:Work/repo.git)并在repo中运行git config user.name时,得到的是Home而不是Work
你知道为什么这行不通吗?

mkshixfv

mkshixfv1#

正如其名称所示,includeIf...语句只允许包含另一个 file(与之相对:同一文件内的配置部分)。
您必须将email, name参数放在一个单独的文件中,并在主配置文件中使用path = ...指向该文件。
引用git help config的相关示例:

; include only if a remote with the given URL exists (note
; that such a URL may be provided later in a file or in a
; file read after this file is read, as seen in this example)
[includeIf "hasconfig:remote.*.url:https://example.com/**"]
    path = foo.inc

我需要花时间检查一下你的url语法是否有效,我认为git@github.com-Work:**模式就足够了(虽然我还没有测试过)

zc0qhyus

zc0qhyus2#

当然,首先要改变的是@LeGEC已经提到的。
然而,还有一个额外的细节需要注意(这在问题中已经做了,但我想强调一下,因为我不能发表评论,我会把它作为答案发布,以供将来参考)。
指定的URL必须在末尾有一个glob模式*/****是不够的,因此您可能会发现自己处于git不包含额外配置的情况。
示例:

git@github.com-Work:*/**

代替

git@github.com-Work:**

这是我不知道的事情,因此我想知道为什么它不起作用。对我来说,解决办法是问题!

相关问题