在这段时间里,认识了很多前端技术圈的大牛,每一个人的风格都很凸显,其中就包括了 ID 名的独一性。相比我的“icorvoh”,连我周围的人都不知道怎么读出来...。
某:“你的 Github ID 是多少?i 什么什么?我们互关一下”
我:“嗯...i, c, o, r, v, o, h....”
是时候打破僵局了,重新起一个更专属的名字了。于是,这就摆在了 2018 年就要到来前的重要议程上。结合自己的真实姓名“韩亦乐”的拼音首字母,尝试在其后加上一个朗朗上口的后缀,就有了最终版 ID 名。
况且“hyle”有“原质”、“原始物质”的意思,哲学寓意挺能浮想连篇的。
那么,为什么如此注重 ID 名的选取?
哲学角度来说,哲学三大问题是:我是谁?我从哪里来?我要到哪里去?学习编程的过程中,除了去深入理解数据类型、数据结构、设计模式、算法思想等编程硬核心外,更要深入探索自己的性格、自己对行业的看法以及自己想要在行业取得的成就等等。一个好的 Github ID 名,就是告诉自己,告诉大家“我是谁”,是一切的起源。哈,这还是有点偏题了。
Really change your username?
Unexpected bad things will happen if you don’t read this!
We will not set up redirects for your old profile page.
We will not set up redirects for Pages sites.
We will create redirects for your repositories (web and git access).
Renaming may take a few minutes to complete.
其中重点提到了,改名会有意想不到的副作用,且 Github 不会为用户之前的 ID 名作跳转,但会对仓库做跳转。修改 ID 名后,Commit 几乎全部消失,剩下的绿点和 ID 名没关系,主要是自己账号某时提交了 issue 、自己某时加入了新组织、某时建立了新仓库的信息。
第二步,修改 Git 全局用户名和邮箱号。
如何恢复自己的绿点呢?在 Github 帮助手册有关 Commit 绿点的出现原理中要求到:“The email address used for the commits is associated with your GitHub account.”,这要求我们每个 Commit 的作者 ID、邮箱号必须和我们当前用户 ID、邮箱号一致,命令行输入 git log 可以看到仓库所有提交的作者信息都是旧信息,也因此绑定不到 Github 的绿点中。
cd js-design-patterns && sh ../git-user-change.sh && cd ..
cd linux-c && sh ../git-user-change.sh && cd ..
cd node-server && sh ../git-user-change.sh && cd ..
cd php-oo && sh ../git-user-change.sh && cd ..
cd servlet-jsp && sh ../git-user-change.sh && cd ..
cd sql-nosql && sh ../git-user-change.sh && cd ..
cd webpack-learn && sh ../git-user-change.sh && cd ..
前注:这是一篇糅杂心路历程与技术干货的文章,委婉到来,不喜轻喷~
心路篇
碾转多年,终于敲定了自己的 Github ID 英文名。
从高中最早起的“corvoh”是想致敬 2012 年度黑马游戏作品 “Dishonored” 的。这是一款动作冒险游戏,科技与超自然力量并存,在集权工业城市中潜行与暗杀,很符合我当年对待压抑至极的高考时的心境。可奈何“corvoh”容易重名,在有些不错的网站平台上起个性域名时会遇到冲突,只得作罢。
大学开学拥有了属于自己的一部 iPhone 5S,深深的被其美感和 ios 生态折服,很自然的成为了果粉。就想到了加个果粉标志——“icorvoh”,各平台畅通无阻,于是用到了现在。
在这段时间里,认识了很多前端技术圈的大牛,每一个人的风格都很凸显,其中就包括了 ID 名的独一性。相比我的“icorvoh”,连我周围的人都不知道怎么读出来...。
是时候打破僵局了,重新起一个更专属的名字了。于是,这就摆在了 2018 年就要到来前的重要议程上。结合自己的真实姓名“韩亦乐”的拼音首字母,尝试在其后加上一个朗朗上口的后缀,就有了最终版 ID 名。
况且“hyle”有“原质”、“原始物质”的意思,哲学寓意挺能浮想连篇的。
那么,为什么如此注重 ID 名的选取?
哲学角度来说,哲学三大问题是:我是谁?我从哪里来?我要到哪里去?学习编程的过程中,除了去深入理解数据类型、数据结构、设计模式、算法思想等编程硬核心外,更要深入探索自己的性格、自己对行业的看法以及自己想要在行业取得的成就等等。一个好的 Github ID 名,就是告诉自己,告诉大家“我是谁”,是一切的起源。哈,这还是有点偏题了。
另一个角度,Phil KarIton 说过,“计算机科学只存在两个难题:缓存失效和命名。”。代码主要是人读的,偶尔在机器上跑一下。因此,每个变量、常量、架构分层如何有一个合理的名字,将是化解软件危机再出现的基石之一。
技术篇
在改名之前,我们的绿条是这样的,展现了我们这一年所有的有效 Commit:
第一步,改名,Commit 绿点全部消失。
Github 用户设置里,点击修改名字,会得到如下提示:
其中重点提到了,改名会有意想不到的副作用,且 Github 不会为用户之前的 ID 名作跳转,但会对仓库做跳转。修改 ID 名后,Commit 几乎全部消失,剩下的绿点和 ID 名没关系,主要是自己账号某时提交了 issue 、自己某时加入了新组织、某时建立了新仓库的信息。
第二步,修改 Git 全局用户名和邮箱号。
如何恢复自己的绿点呢?在 Github 帮助手册有关 Commit 绿点的出现原理中要求到:“The email address used for the commits is associated with your GitHub account.”,这要求我们每个 Commit 的作者 ID、邮箱号必须和我们当前用户 ID、邮箱号一致,命令行输入
git log
可以看到仓库所有提交的作者信息都是旧信息,也因此绑定不到 Github 的绿点中。答案藏在 Git 全局配置文件里,直接修改配置文件
vim ~/.gitconfig
里的用户名和邮箱号,或输入git config --global user.name hylerrix
和git config --global user.email hylerrix@foxmail.com
间接设置用户名和邮箱号。git config --global --list
可以展示出我们的 Git 全局配置,修改之前的如下。修改之后,我们的每次新的 Commit 便会使用新的 ID 名和邮箱号提交,被 Github 绿点机制跟踪到。可是,要修改之前已经提交过的记录怎么办?
第三步,修改历史记录里的 Commit 作者信息
使用
git commit --amend
显然不行,这只会修改我们最后一次提交记录的 Commit Message 信息,其中的作者信息更是无法被修改。这里就要用到
git filter-branch
核弹级命令了,编写git-user-change.sh
脚本,即可将主分支下所有曾经的旧 ID 名和旧邮箱号改为新的 ID 名和新的邮箱号。源码如下:此脚本专门用来在命令行使用
sh
命令执行,将其放在需要修改的项目的上一层文件夹中执行sh ../git-user-change.sh
便开始自动化重写所有脚本能匹配到的提交信息了。拥有条件判断的此脚本,最大的好处便是,不会覆盖掉团队协作项目中,他人的提交信息。核弹级的
git filter-branch
还能做很多事情,比如将某个文件从 Git 历史记录删除,总而降低 Git 项目的大小:这条命令会将项目 Git 所有历史里删除对 src.zip 的记录,整个 .git 文件夹会轻很多。
第四步,解决强制更新远程仓库时的 SSH Key 问题
git filter-branch
的副作用是修改到的 Git Commit 的 Commit ID 也会被改变。这会影响到整个 git 历史线。因此我们需要用到git push origin --force
强制更新。如果你的当前项目有很多人同时在协作,那就糟了,需要让其他人的仓库也强制更新你的 Commit 历史信息。这种分布式协作方式导致每人电脑上都有一份完整的 Git 信息的方式,是不是有些像比特币?说 push 就 push,但会遇到权限问题:
这是因为,即使本地全局配置中的用户名和邮箱号已经更新,但也因此导致 ssh-key 对应不了 Github 上的公钥。需要我们重新设置 ssh-key。输入新的 ssh-key 配置,大胆覆盖之前的公钥密钥就好。
公钥的内容输入以下命令可以获取到:
接下来便将公钥内容粘贴到 Github 远程 SSH Key 配置中即可。
第五步,强制更新,删库跑路
再次输入
git push origin --force
,Git 将会把远程所有内容更新为本地的状态。一个仓库搞定了,剩下的仓库都不难了。将远程所有和自己提交记录有关的仓库都 clone 下来,集体进行高效更改,如下更改的是我的 hylerrix-demos 仓库里的项目:
Git 仓库一般保存在远程就好,需要维护时重新 clone,因此之后修改可以从本地删除——集体性强制推送,删库跑路。
上列每一条命令所耗用的时间都不会少,尤其是当 Git 项目很大的情况下。因此,很可能你也会想到同时使用多个终端来做 force push,即强制推送:
在 push 的过程中,曾经的 1030 个 Git Commit 逐渐恢复中。。
第六步,Commit 绿点的收尾
到了这一步,最终 1030 个 Commit 变成了 942,丢了 88 个 Commit。果然修改用户名有“无法预料”的问题,暂不深究,任其消失于迷雾~
推荐一个最近刚火起来的项目,Star 数短短几天临近上万——github-profile-summary。只要你 Star 了这个项目,等待一段时间,就可以在其官网上看到你的 Github 性格图谱了。
如下是我的 Github 性格图谱,为 JavaScript 成为世界上最流行的语言助力了一把: