根据远程克隆URL为Git config使用不同的user.email和user.name
我将全局根据远程克隆URL为Git config使用不同的user.email和user.name,git,Git,我将全局~/.gitconfig属性user.name和user.email配置如下: git config --global user.email "mkobit@example.com" git config --global user.name "mkobit" 这是我在处理个人项目、开放源代码等工作时想要的默认配置 当我从特定域(例如公司域)处理项目时,我会在克隆它时为每个存储库配置它,以便它使用不同的用户。name/用户。email: git clone ssh://git@gi
~/.gitconfig
属性user.name
和user.email
配置如下:
git config --global user.email "mkobit@example.com"
git config --global user.name "mkobit"
这是我在处理个人项目、开放源代码等工作时想要的默认配置
当我从特定域(例如公司域)处理项目时,我会在克隆它时为每个存储库配置它,以便它使用不同的用户。name
/用户。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"
一个不错的选择是为克隆这类存储库设置别名:
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
这两种方法都很容易出错,因为它们都依赖于我的聪明和遵循正确的步骤。证据表明,这几乎可以保证我会在某个时候搞砸
是否有一种方法可以配置Git,从而以某种方式配置来自某个域(本例中的mycorp.com
)的存储库 的发行版引入了一种称为条件包含的功能。在2.13中,唯一受支持的配置是文件系统路径。在这种情况下很容易使用,因为我已经在分离它们了
发行说明中提供的示例如下:
您可以在主目录的~/.gitconfig
文件中配置两个条件包含:
[includeIf "gitdir:~/work/"]
path = .gitconfig-work
[includeIf "gitdir:~/play/"]
path = .gitconfig-play
现在,您可以将任何想要的选项放入这些文件中:
$ 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
旧答案 在中,添加了一个全局配置
user.useconfigonly
,该配置坚持用户在提交前设置其user.email
和user.name
。以下是Github链接的博客文章中的相关文本:
但是,如果您想让Git为您的开源项目使用一个电子邮件地址,为您的工作项目使用另一个电子邮件地址,那么您无疑犯了一个错误:没有在该存储库中首先设置电子邮件地址,就提交到新的Git存储库。在这种情况下,Git会发出警告,但它仍然会使用从本地系统主机名猜出的电子邮件地址创建提交。如果你想为不同的项目做一些复杂的事情,比如不同的地址,这几乎肯定不是你想要的
现在,您可以告诉Git不要猜测,而是坚持在允许您提交之前显式设置user.name和user.email:
git config --global user.useconfigonly true
这并不能解决基于某些克隆URL的自动配置问题,但通过在开始时强制进行配置,确实使该过程不那么容易出错。我发现自己也遇到了同样的情况:意识到在推送到非公司存储库之后,我立即使用公司电子邮件进行提交。。。因此,我编写了一个小git钩子,您可能会发现它也很有用: 基于一个可配置的模式文件,它将在git clone上初始化user.email和user.name 当我从特定域(例如公司域)处理项目时,我会在克隆它时为每个存储库配置它 如果您的条件包括配置
IncludeIf
使用模式,请确保使用Git 2.22(2019年第2季度):
参见作者(2019年3月26日)(于2019年4月22日合并)
config
:更正模式中的“**
”匹配
当前的wildmatch()
调用includeIf
的gitdir模式不可用
传递WM_路径名
标志。
如果没有此标志,“*
”的处理方式与“***
”几乎相同(因为“*
”也与斜杠匹配),但有一个例外:
“/**/
”可以匹配单个斜杠。
模式“foo/**/bar
”与“foo/bar
”匹配
但是,“/*/
”,这基本上是wildmatch引擎在没有WM_PATHNAME
的情况下看到的,必须匹配两个斜杠(并且“*
”不匹配任何内容)。
这意味着“foo/*/bar
”不能匹配“foo/bar
”。
它只能与“foo//bar
”匹配
其结果是当前的wildmatch()
调用在大多数情况下都有效
用户依赖于“/**/
”匹配的无路径组件之前的时间。
而且“*
”匹配斜杠,虽然它不应该匹配斜杠,但人们可能会这样做
我还没注意到这一点。解决办法很简单
我一直在寻找完全相同的东西。真让人失望。尤其是在开发或自动生成环境中维护同一repo的多个副本或定期删除/重新克隆时。类似于管理不同ssh_ID的东西就可以了。谢谢!我想在这里补充一点,在以下条件中使用尾随斜杠非常重要:~/work/
。您可以通过转到子文件夹中的repo并运行git config user.name
来验证它的设置是否正确吗?尝试访问时无法获取值。