git根据项目目录配置多个用户名和邮箱,防止泄漏公司邮箱

一、目的

       很多同学都是公司和私人电脑混用。公司使用的是自己搭建的gitlab,而自己可能参与一些开源的项目。不希望在开源项目泄漏公司的内部邮箱或者泄漏自己的个人信息。比较笨的方法是每个项目单独设置git config user.name。但是如果偶尔忘记了设置比较坑爹。所以希望可以自动区分公司的项目还是开源的项目。自动使用不同的用户名和邮箱。

二、原理

        查阅了一下git的文档,一开始打算是以git的地址区分的。例如gitlab.xxx.com 就使用用户名A。github.yyy.com使用用户名B。但是找了一圈没有发现有支持(或许有,我没找到,如有请告知一下。)。只找到一个includeIf 和 gitdir。在原文件配置一个[user] 利用includeIf 如果命中,就加载path里面配置的[user] 把原来的[user]覆盖。达到切换效果。

三、实施步骤

1. git的版本

        git --version 查询当前版本。需要2.13.0之后的版本才支持。

2. 整理你的工作空间

        把公司的项目放到一下路径下面。git clone的路径

        例如:对于公司的项目使用  /任意前缀/workspace/company

3. 找到你的.gitconfig文件 

         MacOS 的位置 ~/你的用户名/.gitconfig

         Windows的位置 User/你的用户名/.gitconfig

4. 修改.gitconfig文件配置 

    4.1 在原来[user] 的下方 添加 includeIf 标签

        [user]

            name = yourname

            email = youremail@qq.com

        [includeIf "gitdir:/任意前缀/workspace/company/"]

            path = .gitconfig-company

    4.2 在.gitconfig同级目录增加一个命名为.gitconfig-company文件

        文件内容:

        [user]

            name = companyusername

            email = companyemail@xx.com

         文件根据你的实际需要,改成你需要的名称和邮箱。

     4.3 windows 版本稍微有点不一样

         1⃣️.文件无法命名成 .gitconfig-company结尾。提示文件名为空。可以命名成 company.gitconfig

         2⃣️.盘符和文件路径分隔符。举例:如果你的workspace在 d:/xx/workspace/company你的 includeIf 使用如下:

        [includeIf "gitdir/i:D:/任意前缀/workspace/company/"]

            path = company.gitconfig

5. 验证 

        在公司项目有 .git 文件夹那层 打开命令窗口 输入 git config user.name  或者  git config user.email

                显示的会是 你公司配置文件的用户名或邮箱

        在其他项目有 .git 文件夹那层 打开命令窗口 输入 git config user.name 

                显示的会是 默认的用户名或邮箱


参考文档:

https://git-scm.com/docs/git-config#_includes