為什么Github沒有記錄你的Contributions

jopen 8年前發布 | 15K 次閱讀 Git Github

最近在給同學看我的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 的倉庫)

    </li> </ul>

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

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

    • 你fork過這個倉庫

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

    • 你對這個倉庫標記了Star

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

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

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

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

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

    如何排查

    你可以在你的本地repo里用git log命令查看commit記錄上的個人郵箱是否正確,像我就是因為之前切換到Mac平臺開發之后用戶名沒有配置,所以我之后的commit記錄上的郵箱一直是Leo@Leo-MacBook-Pro.local,所以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
                  </p>
                  <p>
                      git filter-branch --env-filter '
                  </p>
                  <p>
                      OLD_EMAIL="舊的Email地址"
                  </p>
                  <p>
                      CORRECT_NAME="正確的用戶名"
                  </p>
                  <p>
                      CORRECT_EMAIL="正確的郵件地址"
                  </p>
                  <p>
                      if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
                  </p>
                  <p>
                      then
                  </p>
              </div>
      

      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

      </li>
    4. 按Enter鍵執行腳本。

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

    6. 把正確歷史 push 到 Github

    7. </ol>

      git push --force --tags origin 'refs/heads/*'
      1. 刪掉剛剛臨時創建的 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

      </div>

      來自: http://segmentfault.com/a/1190000004318632

       本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
       轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
       本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!