【git】提交到github不顯示貢獻小綠點問題的解決


問題描述:

  最近一直在用github來寫博客,但是今天發現github上的contributions記錄並沒有我的提交記錄.

  經過一番百度和自行搗鼓發現了問題所在.

原因:

  最近實習,公司給配電腦.原來沒有git,是用homebrew安裝的,github上的倉庫也是用新電腦來創建的,以及后續博客的提交也是.

  因為是mac並沒有進行本地的任何配置,就直接用終端把本地文件push到倉庫中去了.

  原因也就在這里.

  因為你本地的git默認的user.name和user.email並不是你的,而是本機.所以在此期間你的commit都是默認本機的.

  你可以用git config user.name / git config user.email 來查看自己的git所屬

  查不出的結果應該是為空,因為你根本就沒設置過.

  然后用git log查看一下commit記錄.你會驚奇的發現雖然在往你的github倉庫中push,但是用戶名和郵箱卻不是你github的,而是系統默認的pc用戶.

  所以github貢獻統計的根本就不是你的賬戶,就沒有貢獻小綠點咯.

解決辦法:

  1.如果你只是想以后的commit記錄,你只需要把當前本地git的user.name和user.email配置一下即可.

$ git config --global user.name “github’s Name”

$ git config --global user.email "github@xx.com"

   這里只是在git config 后邊添加上了你要更改的內容即可,--global參數指的是全局,也就是你本地的所有倉庫,如果不加就是單個倉庫.

   修改好后,你以后的commit就是你的賬戶了,就能被統計貢獻小綠點了.

  2.如果你不想浪費之前的commit貢獻,需要把所有你用默認賬戶的commit都歸為你真正的名下怎么辦.

  我們需要修改所有的commit和push歷史

git filter-branch -f --env-filter '
if [ "$GIT_AUTHOR_NAME" = "oldName" ]
then
export GIT_AUTHOR_NAME="newName"
export GIT_AUTHOR_EMAIL="newEmail"
fi
' HEAD

git filter-branch -f --env-filter '
if [ "$GIT_COMMITTER_NAME" = "oldName" ]
then
export GIT_COMMITTER_NAME="newName"
export GIT_COMMITTER_EMAIL="newEmail"
fi
' HEAD

   這里的oldName我們可以通過git log來查看,其實這里只要修改GIT_COMMITTER就可以了.

  AUTHOR記錄的是這次修改的作者信息,COMMITTER是這次提交的用戶信息.

  注意兩者區別,

    如果你自己寫自己提交,那么兩者都是你.

    有的項目有的人並沒有commit權限,所以他需要修改完之后交給有權限的人提交,這樣你是AUTHOR並不是COMMITTER 

   如果修改成功提示:Ref 'refs/heads/master' was rewritten.

   如果修改失敗提示:Ref 'refs/heads/master' is unchanged.這里可能是因為你填寫的oldName並沒有找到.

   如果無差別把所有都改的話去掉if..fi

git filter-branch -f --env-filter "
GIT_AUTHOR_NAME='newName'; 
GIT_AUTHOR_EMAIL='newEmail'; 
GIT_COMMITTER_NAME='newName';
GIT_COMMITTER_EMAIL='newEmail'
" HEAD

  這樣就全部改過來了.

注意:

  你這里將你本地git的賬戶和郵箱重新設置了,但是github並沒有那么智能就能判斷你是原來你系統默認的用戶.

  也就是說你新配置的用戶和你默認的被github識別成兩個用戶.

  這樣你以后操作的時候commit 或者 push的時候有可能產生沖突.

  解決方法是

  1.使用強制push的方法:

   $ git push -u origin master -f
  這樣會使遠程修改丟失,一般是不可取的,尤其是多人協作開發的時候。

  我這里只是自己寫的博客,所以就直切全部強制覆蓋掉了.

  2.push前先將遠程repository修改pull下來

  git pull origin master
  git push -u origin master

  3.若不想merge遠程和本地修改,可以先創建新的分支:

  git branch [name]
  然后push

  git push -u origin [name]

效果圖: 

在使用默認的git用戶修改的顯示是這樣的,nice是我的pc用戶名

修改之后,

修改完之后刷新,我的貢獻小綠點全部出來了.(小綠點是以賬戶郵箱為單位記錄的,如果有多個郵箱,可以在信息里的email添加新郵箱就完事ok)

最后叮囑:

  當我們換電腦使用git的時候,記得修改 git config user.name/user.email就不會出現這樣的問題了.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM