爲什麼你的 Contributions 沒有在你的 Profile 裏顯示?

最近在給同學看我的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統計?

英語好的同學請移步 Why are my contributions not showing up on my profile?

Issues 和 pull requests

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

Commits

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

  • 一年之內提交的commits
  • commits使用的email地址是與你的Github賬號相關聯的
  • 這些commits是在一個獨立的倉庫而不是fork倉庫
  • 這些commits是在:
    • 在默認分支上(通常是master
    • gh-pages分支(包含 Project Pages sites 的倉庫)

此外,至少滿足下面條件中的一個(主要針對你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. 給你的repo創建一個全新的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. 刪掉剛剛臨時創建的 clone

    cd ..
    rm -rf repo.git

如何正確設置你的 git 個人信息

接下來全局設置好你的正確信息,以後就放心的用Github進行版本管理吧 ^_^

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

更多配置可以參考Pro Git 8.1自定義 Git - 配置 Git

轉載請註明原文鏈接:http://xunli.xyz/2016/01/09/g…

發佈了173 篇原創文章 · 獲贊 41 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章