为什么GitHub没有记录你的Contributions

最近在查看我的GitHub贡献记录时,发现我的contributions graph上只有几个小绿点,大多数repo的commit都没有被记录,Google了下发现原来是因为本地机器Git默认的用户名和邮箱与GitHub账户不一致,导致commit没有被记录。

1.什么你的 Contributions 没有在你的 Profile 里显示?

阅读下官网文档,发现有以下说明:

Your profile contributions graph is a record of contributions you've made to GitHub repositories. Contributions are only counted if they meet certain criteria. In some cases, we may need to rebuild your graph in order for contributions to appear.

您的个人资料贡献图记录了您对GitHub存储库所做的贡献。 仅在满足某些条件的情况下才计入捐款。 在某些情况下,我们可能需要重建您的图形才能显示贡献。

2.什么样的贡献才会被Github统计?

Issues 和 pull requests

  • 这个操作是在一年内
  • 这个操作针对一个独立的仓库,不能是fork

Commits

如果提交符合以下所有条件,则会在您的贡献图中显示:

  • 用于提交的电子邮件地址与您的 GitHub 帐户关联。
  • 提交在独立的仓库而不是fork仓库中进行。
  • 提交在以下位置进行:
    • 在仓库的默认分支中(通常为 master
    • gh-pages 分支 (包含 "About GitHub Pages."的仓库)

此外,必须至少满足以下条件之一(主要针对你Commit的仓库不是你创建的):

  • 您是仓库中的协作者,或者是拥有该仓库的组织的成员。
  • 您已fork该仓库。
  • 您对这个仓库发起过pull request或者issue。
  • 您已为仓库标记star。

24 小时内进行的提交

进行满足计为贡献要求的提交后,您可能需要等待最长 24 小时才能看到在贡献图中显示的贡献。

3.Contributions未被Github计入的几个常见原因

  • 进行Commits的用户没有被关联到你的Github帐号中。

  • 不是在这个版本库的默认分支进行的Commit。

  • 这个仓库是一个Fork仓库,而不是独立仓库。

4.如何排查原因

在本地repo中使用git命令查看commit记录的邮箱是否正确

  • 从commit记录中查看邮箱是否正确
git log
  • 从repo配置查看邮箱是否正确
git config user.name
git config user.email

5.补救措施

参考官网详细步骤Changing-author-info

要更改现有提交中记录的名称和/或电子邮件地址,您必须重写 Git 仓库的整个历史记录。
注意:此操作对仓库的历史记录具有破坏性。 如果您正与其他人在仓库上协作,重写已发布的历史记录被视为不良做法。 应该只在紧急情况下才这样做。

使用脚本更改仓库的 Git 历史记录
我们创建了一个用于更改任何提交的脚本,可将此前在作者或提交者字段中填写的旧电子邮件地址更改为正确的名称和电子邮件地址。

注:运行此脚本会重写所有仓库协作者的历史记录。 完成这些步骤后,任何拥有复刻或克隆的人都必须获取重写的历史记录,并将任何本地更改变基为重写的历史记录。

运行此脚本之前,您需要:

1.Mac、Linux下打开Terminal,Windows下打开Git Bash终端。

2.为仓库创建一个全新的clone

git clone --bare https://github.com/user/repo.git
cd repo.git
3.复制并粘贴脚本,并根据你的信息修改以下变量:旧的Email地址,正确的用户名,正确的邮件地址

#!/bin/sh

git filter-branch --env-filter '

OLD_EMAIL="旧的Email地址"
CORRECT_NAME="正确的用户名"
CORRECT_EMAIL="正确邮件地址"

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

4.按 Enter 键以运行脚本。

5.使用git log 审查新的 Git 历史记录以查找错误。

6.将更正的历史记录push到 GitHub:

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

7.清理临时克隆:

cd ..
rm -rf repo.git

6.如何正确设置你的git个人信息

全局设置好你的正确信息:

git config --global user.email "你的邮件地址"
git config --global user.name "你的Github用户名"

如需单独仓库设置,则去掉--global参数即可。
更多Git配置参考:
自定义 Git - 配置 Git

7.push/pull异常处理

在push时需要merge,但是合并时报错:

1.Error merging: refusing to merge unrelated histories.

2.You have not concluded your merge (MERGE_HEAD exists).

原因就是pull下来代码自动合并失败

解决方法:

对于第一种错误在pull时加上:git pull --allow-unrelated-histories即可

第二种解决方法:
1.保留本地的更改,中止合并->重新合并->重新拉取

git merge --abort
git reset --merge
git pull

2.舍弃本地代码,远端版本覆盖本地版本(慎重)

git fetch --all
git reset --hard origin/master
git fetch

Copyright: 采用 知识共享署名4.0 国际许可协议进行许可

Links: https://maplefix.top/archives/github-contributions