找回GitHub消失的contributions

作为世界上最大同性交友网站——GitHub 😂

自从入了坑,天天想着push代码。之前Yumeer的项目本来在Coding上,后来嫌弃它不够洋气,就换到GitHub上来了,搭建好仓库,配置好ssh,开始安心写代码。commit一两次后,我发现我的contributions并没有被点亮啊,一开始以为是私有仓库的原因,没去管。直到最近突然发现我一直设置的是展现所有项目。几番寻找,后来发现了问题——为了方便pull/push。我使用了SSH,在公司里面,我配置成[email protected],家里配置成了[email protected]。push代码的时候,GitHub无法匹配账户信息,默认判断为新用户提交,这也就造成了最后无法count进自己的contributions。

根据GitHub官方的解决方案如下:

0.确定你错误的和正确的username/email信息(正确信息直接在GitHub profile里面找,错误的如果不知道,先执行下一步)

1.Clone一个临时仓库

git clone --bare https://github.com/your-account/your-repo.git
cd your-repo.git

如果不知道错误信息可以在完成第一步后通过git log命令获取

2.运行以下脚本

注意:替换脚本中的[email protected]/Your Correct Name/[email protected]

#!/bin/sh

git filter-branch --env-filter '
OLD_EMAIL="[email protected]"
CORRECT_NAME="Your Correct Name"
CORRECT_EMAIL="[email protected]"
if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
then
    export GIT_COMMITTER_NAME="$CORRECT_NAME"
    export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
then
    export GIT_AUTHOR_NAME="$CORRECT_NAME"
    export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
fi
' --tag-name-filter cat -- --branches --tags

这里,就是一个简单的fliter——通过判定旧的git.config.email来更改每次commit的作者信息。同理,可以使用git.config.name来实现目的(更推荐,因为邮箱可能重复)

#!/bin/sh

git filter-branch --env-filter '
OLD_NAME="your-old-name"
CORRECT_NAME="Your Correct Name"
CORRECT_EMAIL="[email protected]"
if [ "$GIT_COMMITTER_NAME" = "$OLD_NAME" ]
then
    export GIT_COMMITTER_NAME="$CORRECT_NAME"
    export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
fi
if [ "$GIT_AUTHOR_NAME" = "$OLD_NAME" ]
then
    export GIT_AUTHOR_NAME="$CORRECT_NAME"
    export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
fi
' --tag-name-filter cat -- --branches --tags

3.运行后,会提示多少commit被修改,然后直接push

git push --force --tags origin 'refs/heads/*'

到此为止搞定,去check一下。最后记得rm刚刚的临时仓库。

Enjoy!:P

找回GitHub消失的contributions

发表评论

电子邮件地址不会被公开。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据