首页 > 解决方案 > 如何根据我要克隆的 git 存储库来源自动更改我的本地 git config `user.email`?

问题描述

我在我的笔记本电脑上主要使用两种类型的存储库,一方面,用于我的工作项目,另一种用于 oss 项目,但它们使用不同user.emailgit config --list相同user.name)。

我想知道user.email当我克隆一个新项目时,是否有一种方法可以从一开始就正确设置(存储库的本地)(知道全局配置设置为我的 oss 项目)。

原因是我时不时忘记手动设置我的工作项目的本地配置并最终推送用错误用户(即 oss 用户)签名的提交,然后我不得不重新设置最后 N 次提交左右,这可能很烦人。

标签: git

解决方案


Git 本身并没有办法精确地完成您所要求的事情。不过,有两种明显的方法可以获得相同的结果

  • 其中一个使用 Git 2.13 版中的一项新功能,称为includeIf. 在这里,您将使用存储库集合中的位置来确定如何配置项目。有关详细信息,请参阅个人和工作配置文件的 Git includeIf 不起作用

  • 另一种是停止使用git clone来制作克隆。相反,编写您自己的命令,由 runninggit clone和 running组成git config。在这里提到这个,我会称它为git clone-and-config虽然你可能想要一个短名称,如git cc.

    此命令可以是使用语法运行多个命令的 Git别名,也可以是 Git 可以找到以便运行您的脚本的脚本。当然,如果您要编写自己的脚本,您可以随意调用它,并在不带前缀的情况下调用它。使用前缀的唯一原因是让它感觉像是“Git 的一部分”,即使是你自己写的。!git-clone-and-configgit clone-and-configgit-clone-and-configgitgit

    有关此替代方案的详细信息,请参阅如何将 bash 脚本直接嵌入到 git 别名中。

最后一点:git clone可以在新克隆中设置配置值git clone。因此,您可以将最后一部分简化为:

git clone -c 'user.email=A U Thor <thor@example.com>' <url>

这意味着您可以将其设为非!样式 Git 别名:

[alias]
    cloneasfred = git clone -c 'user.email=Fred Flintstone <fflint@bedrock.prehisory>'
    cloneasbarney = git clone -c 'user.email=Barney Rubble <brub@bedrock.prehistory>'

当心! git -c user.email=... clone 没有做正确的事,而git clone -c user.email=...做。的位置在-c这里至关重要。


推荐阅读