1. 程式人生 > >為什麼Github沒有記錄你的Contributions

為什麼Github沒有記錄你的Contributions

最近在給同學看我的github時,突然發現我的Contributions Graph上一篇空白居然只有兩三個小綠塊,因為自己平時在公司工作的記錄會顯示在自己的Contribution Graph上,所以一直沒發現個人repo的commit記錄都沒有被記錄,於是外事不決問Google,發現原來是因為git初始化設定時沒有設定正確的使用者名稱和郵箱(主要是郵箱),具體可以參考Github官方寫的help文件

為什麼你的 Contributions 沒有在你的 Profile 裡顯示?

那麼問題來了,什麼是Contributions呢,Github官網上有這麼一句話:

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上的倉庫的貢獻。它僅僅只記錄某些符合標準的commits。在某些情況下,我們需要重新建立你的貢獻圖以便讓所有的貢獻都顯示出來。

什麼樣的貢獻才會被Github統計?

Issues 和 pull requests

  • 這個操作是在一年之內

  • 這個操作是針對一個獨立的倉庫,不能是fork

Commits

當你的commits滿足以下條件時,它才會被展示出來:

  • 一年之內提交的commits

  • commits使用的email地址是與你的Github賬號相關聯的

  • 這些commits是在一個獨立的倉庫而不是fork倉庫

  • 這些commits是在:

    • 在預設分支上(通常是master)

此外,至少滿足下面條件中的一個(主要針對你Commit的倉庫不是你建立的):

  • 你是這個倉庫的協作者,或者是這個版本庫的擁有組織中的一員

  • 你fork過這個倉庫

  • 你對這個倉庫發起過pull request或者issue

  • 你對這個倉庫標記了Star

注意:私有庫的貢獻僅僅對私有庫成員顯示

Contributions未被Github計入的幾個常見原因

  • 進行Commits的使用者沒有被關聯到你的Github帳號中。

  • 不是在這個版本庫的預設分支進行的Commit。

  • 這個倉庫是一個Fork倉庫,而不是獨立倉庫。

如何排查

你可以在你的本地repo裡用git log命令檢視commit記錄上的個人郵箱是否正確,像我就是因為之前切換到Mac平臺開發之後使用者名稱沒有配置,所以我之後的commit記錄上的郵箱一直是[email protected],所以Github就會認為這些commits都不是你提交的!

補救措施

然而這也並不是沒有補救辦法的,Github官網上就有給出詳細的補救過程,英語好的同學請自行移步 Changing author info ,下面是我翻譯自Github Help的簡要步驟:

變更作者資訊

為改變已經存在的 commits 的使用者名稱和/或郵箱地址,你必須重寫你 Git repo 的整個歷史。

警告:這種行為對你的 repo 的歷史具有破壞性。如果你的 repo 是與他人協同工作的,重寫已釋出的歷史是一種不好的習慣。僅限緊急情況執行該操作。

使用指令碼改變你 repo 的 Git 歷史我們寫了一段能把 commit 作者舊的郵箱地址修改為正確使用者名稱和郵箱的指令碼。

使用指令碼來改變某個repo的Git歷史

我們已經建立了一個指令碼,使用正確的姓名和電子郵件地址提交後,你以前提交的所有的commits中的作者資訊及提交者欄位中的舊的使用者名稱和郵箱地址都將被更正

注意:執行這段指令碼會重寫 repo 所有協作者的歷史。完成以下操作後,任何 fork 或 clone 的人必須獲取重寫後的歷史並把所有本地修改 rebase 入重寫後的歷史中。

在執行這段指令碼前,你需要準備的資訊:

  1. Mac、Linux下開啟Terminal,Windows下開啟命令提示符(command prompt)

  2. 複製貼上指令碼,並根據你的資訊修改以下變數:

    舊的Email地址,正確的使用者名稱,正確的郵件地址

    #!/bin/bash git filter-branch --env-filter ' OLD_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

  3. 執行指令碼。

  4. 用git log命令看看新 Git 歷史有沒有錯誤

  5. 把正確歷史 push 到 Github

git push --force --tags origin 'refs/heads/*'
  1. 刪掉剛剛臨時建立的 clone

cd ..
rm -rf repo.git

如何正確設定你的 git 個人資訊

接下來全域性設定好你的正確資訊,以後就放心的用Github進行版本管理吧^_^

1 git config --global user.email "你的郵件地址"
2 git config --global user.name "你的Github使用者名稱"