本文主要记录git多用户配置。

常见的使用场景是公司和github的用户配置不一样:

普通做法是为每个repo单独配置 User config

git config --local user.name "name"
git config --local user.email "email"

repo多起来后再这样手动配置就有点麻烦了。考虑到公司和github的repo地址一个是gitlab,一个是github,所以有没有能根据repo地址自动配置git用户信息的方法呢?

git user 自动配置

git 的User信息配置分两种,一种是global,一种是local。其中local配置信息存储在./.git/config文件中。

可以通过hook在每次commit之前判断repo地址来修改config,达到自动化的目的。

1、修改 ~/.gitconfig

[init]
templatedir = ~/.git/templates

这会使得每个 git 目录在init时都会都会引用这个 templates 中的 配置。

2、新建 ~/.git/templates/hooks/pre_commit 文件,在这个文件中的命令会在每次commit前执行。

3、chmod +x ./pre_commit

然后在下次 commit 时会自动切换 user config 了,如果需要在已经初始化的 git 项目中使用这个 hook,重新运行 git init 即可。

修改已提交的作者信息

有时候用了错误的User config提交了一条commit,怎样只修改User信息呢?

1、找到错误commit的上一个commit

git rebase -i HASH

如果要修改第一条commit

git rebase -i --root

2、使用 edit 修改该commit,保存退出后

Stopped at c9441b4... init
You can amend the commit now, with

git commit --amend

Once you are satisfied with your changes, run

git rebase --continue

3、用 --amend 修改 author

git commit --amend --author="user <user@email.com>" --no-edit
git rebase --continue

4、强推到远程分支

参考

  1. http://stackoverflow.com/a/23107012/4422890
  2. https://www.git-tower.com/learn/git/faq/change-author-name-email