根据远程克隆URL,为Git config使用不同的user.email和user.name

mko*_*bit 18 git

我配置我的全局~/.gitconfig属性user.name,user.email像这样:

git config --global user.email "mkobit@example.com" 
git config --global user.name "mkobit"
Run Code Online (Sandbox Code Playgroud)

这是我想要处理个人项目,开源资料等的默认配置.

当我正在处理来自特定域(例如公司域)的项目时,我在克隆它时为每个存储库配置它,以便它使用不同的user.name/ user.email:

git clone ssh://git@git.mycorp.com:1234/groupA/projectA.git
cd projectA
git config user.email "mkobit@mycorp.com"
git config user.name "m.kobit"
Run Code Online (Sandbox Code Playgroud)

一个不错的选择是设置别名来克隆这些类型的存储库:

git config --global alias.clonecorp 'clone \ 
        -c user.name="m.kobit" -c user.email="mkobit@mycorp.com"'
git clonecorp ssh://git@git.mycorp.com:1234/groupA/projectA.git
Run Code Online (Sandbox Code Playgroud)

这两者都可能容易出错,因为它们都依赖于我的聪明并遵循正确的步骤.有证据表明,这种情况几乎可以保证在某个时候搞砸了.

有没有办法配置Git,以便某个域(mycorp.com在本例中)的存储库将以某种方式配置?

mko*_*bit 13

Git 2.13的发布引入了一个名为条件包含的功能.在2.13中,唯一支持的配置是文件系统路径.在这种情况下,这很容易使用,因为我已经把它们分开了.

发行说明中提供的示例是:

您可以在主目录的~/.gitconfig文件中配置两个条件包含:

[includeIf "gitdir:~/work/"]
    path = .gitconfig-work
[includeIf "gitdir:~/play/"]
    path = .gitconfig-play
Run Code Online (Sandbox Code Playgroud)

现在,您可以将所需的任何选项放入这些文件中:

$ cat ~/.gitconfig-work
[user]
name = Serious Q. Programmer
email = serious.programmer@business.example.com

$ cat ~/.gitconfig-play
[user]
name = Random J. Hacker
email = rmsfan1979@example.com
Run Code Online (Sandbox Code Playgroud)

老答案

Git 2.8中,user.useconfigonly添加了一个全局配置,它坚持要求用户在提交之前设置它们user.emailuser.name进行设置.以下是Github链接博客文章中的相关文字:

但是,如果您希望Git为您的开源项目使用一个电子邮件地址而为您的工作项目使用另一个电子邮件地址,那么毫无疑问,如果没有先将您的电子邮件地址设置为库.在这种情况下,Git会发出警告,但无论如何都会使用从本地系统主机名猜测的电子邮件地址创建提交.如果你想为不同的项目做一些像不同地址一样复杂的事情,这几乎肯定不是你想要的.

现在您可以告诉Git不要猜测,而是坚持在允许您提交之前明确设置user.name和user.email:

git config --global user.useconfigonly true
Run Code Online (Sandbox Code Playgroud)

这不能解决基于某些克隆URL的自动配置,但通过在开始时强制配置确实使该过程不易出错.

  • 谢谢你!我想在这里补充一点,在条件“~/work/”中使用尾部斜杠**非常重要**。 (3认同)
  • 请注意,现在支持更多关键字,另请参阅 https://git-scm.com/docs/git-config#_conditional_includes 了解完整列表和其他信息。 (2认同)

Vet*_*sin 12

从2.36.0开始, git 现在通过远程 url支持此功能

~/.gitconfig 文件:

[includeIf "hasconfig:remote.*.url:git@github.com*/**"]
    path = .gitconfig-public
[includeIf "hasconfig:remote.*.url:git@ghe.corp.lol*/**"]
    path = .gitconfig-work
Run Code Online (Sandbox Code Playgroud)

然后将您的自定义添加到上面引用的配置中。


Hen*_*ing 7

我发现自己处于同样的情况:意识到我在推送到非公司存储库后立即使用我的公司电子邮件进行提交......所以我写了一个小的 git-hook,你可能会发现它也很有用:https://github .com/DrVanScott/git-clone-init

基于可配置的模式文件,它将在 git clone 上初始化 user.email 和 user.name。