git多账号配置
[TOC]
一、背景
最近看了一些博客都是在推荐技术新人通过写博客的方式记录学习到的知识点和遇到的问题,好记性不如烂笔头,我也尝试开始写博客,在通过github gitpage
搭建博客的时候发现需要在一台电脑中配置两个git
账号,之前都是全局配置公司的gitlib
账号。记录一下整个的配置过程,过程中也踩了不少坑。
二、需求
在电脑上配置两个git
账号,一个是gitlib
账号用来工作使用,一个是github
账号用来博客推送。
三、配置
3.1 清除全局配置
1 | 查看全局配置;若存在用户名和邮箱则清除 |
3.2 生成秘钥
生成两个秘钥,一个用于公司工作,一个用于博客。
1 | 一路回车即可 |
我这边是把生成的两个秘钥对(总共四个文件)分类在两个文件夹下(company
和xiaocaioniaoya
)。
1 | cd ~/.ssh |
生成之后分别把.pub
后缀公钥放置到远程服务器的SSH keys
中。
3.3 秘钥添加到本地
1 | ssh-add ~/.ssh/company/id_rsa_company |
3.4 创建config文件
一下是我的config
配置文件
1 | 公司的 gitlib |
3.5 测试是否可以连接
1 | 直接就是这个命令 |
3.6 配置local
级别用户名和邮箱
由于本地配置了多账号,在提交时根据不同的地址采用不同的用户名和邮箱,所以需要进入到某个项目配置当前项目的用户名和邮箱信息。
1 | git config --local user.name "xiaocainiaoya" |
四、问题
在配置完成之后,也测试可以提交之后没有太多关注具体的提交信息,在使用一段时间之后发现博客的提交记录中用户名是我的名字。由于用户名的级别system
>global
>local
。在添加了local
配置之后,后续提交的记录上用户名和邮箱正常了,那之前提交的那些用户名和邮箱怎么改?
git filter-branch
git中最猛的后悔药,没有把握慎用。
1 | git filter-branch -f --commit-filter ' |
执行命令之后会发现用户名和邮箱都已经修改为想要变成的样子。再执行强制推向远程,要确保已经是最新的HEAD
否则会覆盖他人编写的代码。(HEAD
可以修改为HEAD~5..HEAD
表示最近的5个提交)
1 | git push --force |
git filter-branch
还有很多的其他的用法,有一个我觉得日常中可能会使用到的。
在某次提交时提交了某个大文件或者敏感文件,虽然可以在下次提交中删除该文件,或者把该文件添加到.gitignore
中,但是如果回溯到某个提交时那个文件还是存在,现在想要将所有历史的提交中移出改文件。
1 | 中间引号那一段是shell脚本 |
git filter-branch
执行之后都需要强制推向远程,可能会覆盖他人的提交,所以称为最猛的后悔药。