git 与 npm 的配置隔离

周末将公司电脑的系统升级了下,同时测试了下自己的环境恢复脚本。很快恢复了所有必要的软件及之前的软件配置,运行良好。对于个人项目及公司项目而言,在 git 及 npm 的配置上是有所不同的。git 的提交邮箱不同,提交签署的 gpg 密钥不用;而对于 npm,npm 仓库源不同,发布 npm 包的认证信息不同。所以需要找到一种方法来区分。

Docker

将不同的项目配置放入不同的 Docker 环境中,借助现在完善的 VSCode Remote Containers 插件,可以连接进入 Docker 环境进行开发,不同的 git 及 npm 配置可以在 Dockerfile 中配置。这样基本上可以实现整个环境的隔离。

缺点:

  1. 对所有隔离的项目,都需要进入容器中操作;
  2. 容器中操作的 IO 性能不够好,运行资源消耗大;

分项目配置

.gitconfig 以及 .npmrc 配置文件,都是按照 项目配置 -> 用户配置 -> 安装配置 的路径来查找的。

对于 npm 还可以在 package.json 中配置 publishConfig":{"registry":"http://my-internal-registry.local"} 来指定发布源。

所以,在每个项目中指定单独的配置文件,就好啦!

好个鬼,每个项目都配置一下不得累死。>_<

最佳方案

对于 git 项目配置来讲,基本上是以文件夹的配置为维度的。所以只要有方法能匹配文件夹路径来读取不同的 git 配置就好了。

答案是肯定的,在 ~/.gitconfig 用户的配置文件中,可以这样配置:

1
2
[includeIf "gitdir:~/Code.localized/clickpaas/"]
path= ~/.clickpaas.gitconfig

我的工作代码都会放在 clickpaas 文件夹,所以该配置的作用是,匹配到 clickpaas 的文件夹,就会采用指定路径的 git 配置文件。在这里,我放在了 Home 目录。配置内容和用户配置 ~/.gitconfig 的配置格式一样,这里不再赘述。

对于 npm 配置,私有 npm 包通常会发布在相应的 @scope 下,发布的是一个个 @scope/a @scope/b 这样的包名。所以可以根据 @scope 来匹配相应的 npm 配置。

1
2
3
4
5
6
7
//registry.npmjs.org/:_authToken=xxxx
@scopeA:registry=http://registryA.geekrainy.com/
@scopeB:registry=http://registryB.geekrainy.com/
//registryA.geekrainy.com/:username=rainy
//registryA.geekrainy.com/:email=admin@geekrainy.com
//registryA.geekrainy.com/:always-auth=false
//registryA.geekrainy.com/:_password="xxxxxxx"

上面是一段示例 npm 配置,当匹配到相应 scope 的 npm 包,就会在相应的源中下载,npm publish 的时候也是一样。

可以执行如下命令来登录私有作用域的仓库:

1
npm login --scope=@company-scope --registry=https://registry.company-registry.npme.io/

至此,完成了不同项目中 git 及 npm 的配置分离,而不需要分别对每个仓库进行配置。

配置同步

如果你像我一样,使用 mackup 来同步 mac 的配置,那默认的 git 配置同步不满足需求,无法同步自定义的 git 配置文件。

好在 mackup 支持自定义配置同步选项,新建 ~/.mackup/git.cfg ,内容如下:

1
2
3
4
5
6
7
8
9
10
11
[application]
name = Git

[configuration_files]
.gitconfig
.clickpaas.gitconfig # 增加的 git 配置文件

[xdg_configuration_files]
git/config
git/ignore
git/attributes

增加配置文件便可以完成同步。

-EOF-

本博客所有文章除特别声明外,均采用 CC BY-NC-ND 4.0 许可协议。转载请注明出处! © 雨落
  1. 1. Docker
  2. 2. 分项目配置
  3. 3. 最佳方案
  4. 4. 配置同步