標籤:

GitHub 是識別用戶的機制是怎樣的?

這個問題不知道取得恰不恰當,但是發生的情況大概是這樣的:

我在 GitHub 上的用戶名是 Huxpro,在公司 Gitlab 上的用戶名是 鬼棧 。

然後,我不小心把公司的 git config 和 github 的混了(用得也是一個 SSH Key )。然後就發現所有「鬼棧」的 commits 都沒有被記在 contributions 里…

在 commits 里大概是這樣:

其中,Huxpro 是被識別為一個用戶(可以單獨看 commit,看 profile),但鬼棧不是(因為 GitHub 上沒有這個用戶?)

然後我就試著把公司郵箱添加到了 GitHub 的 Email 里,果然:「鬼棧」 的 commits 被記錄到 huxpro 的 contributions 里了。但是再去看 commits 記錄,居然還是:Huxpro 是被識別為一個用戶的,而鬼棧不是(沒有鏈接)

更神奇的是!

在編輯這個問題之前,所有鬼棧的 commits 歷史記錄還都是這樣的:

可是在我 Update README.md 之後……

居然全部用戶就都被 「修正」 了……

所以之前猜測 「可能 GitHub 在識別 commits 和 識別 user 時的機制不同」 應該也不準確。

所以很好奇 GitHub 是通過什麼機制去識別唯一一個用戶的?

一般來說,本地 git config 里 user 和 email 是一一對應的。可是在 GitHub 里一個 user 可以添加多個 email ,從上述觀察來看好像 Email 才是那個唯一 ID ?

總之這是個即無聊又有點意思的問題吧~


首先問題有三個:

  1. 所有「鬼棧」的 commits 都沒有被記在 contributions 里;

  2. 添加 email 之後,歷史記錄中,Huxpro 是被識別為一個用戶(可以單獨看 commit,看 profile),但鬼棧不是;
  3. Update README.md 之後,全部用戶被修正了。

1. 「鬼棧」的 commits 沒有計入,Github help 中在 Setting your email in Git 中,有說明。

Make sure that the email address you set in your local Git configuration has been added to your GitHub accounts email settings. After adding your email, commits that used that email address will automatically be counted in your contributions graph. There is no limit to the number of email addresses you can add to your account.

因為你的git config中的email沒有添加到 Github 賬戶中,在你添加 email 以後,過去使用這個email的commit將會自動計數。

2. 這個來看 Github help 的Why are my commits linked to the wrong user?

這裡說明這是 Github 的一種報錯的機制。

裡面有三種情況:

  1. 未識別的作者(有 email 地址):這時候你需要添加 email 地址到你的 Github 賬戶中去,這樣就是之前說的,會自動識別。
  2. 未識別的作者(無email地址):這其實是說你所使用的 email 地址已經用在了別的用戶賬號里,這時候你需要修改 git config 中的 email,並且在 Github 用戶中添加該 email。但是這種情況,過去的 commit 在修改之後仍然無法被連接到正確的用戶,這時候你需要通過腳本來修改提交記錄(慎行)Changing author info。
  3. 不可用的 email:這說明你的 git config 里的 email 地址是一個空白或者沒有按照 email 格式正確填寫。這時候和2中做一樣的操作就可以了,而且此處的 commit 歷史記錄也無法正確被連接,需要腳本來幫忙。

3. 在 Setting your username in Git 中有一個小貼士

Tip: You dont have to use your real name--any name works. Git actually associates commits by email address; the username is only used for identification. If you use your email address associated with a GitHub account, well use your GitHub username, instead of this name.

Github 會通過你的 email 來識別用戶,並且一般來說,還會用你的 Github username 替換掉你設置的 username。

所以,當你更新 Update README.md 之後,根據 git config 中的 email 地址,Github 正確識別了 email,並且將你的「鬼棧」用戶名替換為了 Huxpro。而根據 Github help,你修改了郵件地址,只會自動計入,而不會自動將用戶名替換並正確連接。只有當你更新之後,因為 email 識別的問題,全部「鬼棧」都被替換成了你的用戶名。

大概就是這樣,詳情可以去查閱GitHub Help - GitHub Enterprise Documentation.

Github新手用戶,可能有什麼地方弄錯了,請大家指正。


email地址匹配


推薦閱讀:

觀察:阿里巴巴的開源戰略究竟怎麼樣?
平時你使用Git的workflow是怎樣的?
12 件可以用 GitHub 完成的很酷的事情
怎麼預覽 GitHub 項目里的網頁或 Demo?
github誤操作求救?

TAG:Git | SSH | GitHub |