git提交到github总是要输入密码_GitHub不为人知的秘密
本來想叫《GitHub騷操作》的,發現相關的文章已經有很多,而且和我本章要講的內容完全不同,所以就換了這個也算貼切的標題。
起因
之前寫過一篇文章《VM Manager 插件分享》,事后我發現有個地方不對勁!看之前文章標題大家應該都能猜到,這是一篇分享我自己開發的插件的文章,內容比較簡單,沒有什么問題,問題是出在這個項目上。
我自己有兩個 GitHub 賬號,一個用于個人學習和測試(hzh-test),另一個用來做分享(hzh-cocong)。
在以前,我本地用的一直都是 hzh-test 這個賬號。VM Manager 這個插件是放在 hzh-cocong 上的,我在一開始開發的時候直接用 HTTPS 地址克隆項目(git clone https://github.com/hzh-cocong/VM-Manager.git),結果如大家所料,代碼無法 push 到 GitHub 倉庫,因為 push 用的是 hzh-test 身份,而這個項目是屬于 hzh-cocong 所有的。于是我設置了本地項目的 user.name 和 user.email,發現還是無法提交,搞了很久都沒成功,最后無奈改成 SSH 方式才提交成功。(以前是弄過 SSH 的,只是沒完全懂,又覺得麻煩,所以習慣用 HTTPS 的方式)
就這樣,項目愉快地上線了,文章也發出去了。雖然沒什么人看,但畢竟是自己發布的第二篇文章,所以我還是很關注的,沒事我就會去看看有沒有人 start 或者 fork。很遺憾,一個人也沒有 ?。
在這個過程中,我偶然發現一個問題,請看下圖。
這個項目我不是用的 hzh-cocong 的身份創建和開發的嗎?怎么多了個 hzh-test,而且除了最開始的提交,后面的提交都是 hzh-test。真是逆天了!還能不能愉快地玩耍了!
一番研究后,我發現了 GitHub 不為人知的秘密!
緣由
相信不少人第一次用 GitHub 都是去網上搜索教程,而網上的教程第一步大都要我們先設置 user.name 和 user.email 這兩個全局變量。于是,自然而然地我們會把這些變量和我們的 GitHub 身份聯系在一起。我這個本地 VM Manager 項目默認用的也是全局配置(雖然前面說到我做了修改,不過后面又改回來了),所以在 Git 的歷史提交記錄中,其記錄的是 hzh-test,而在項目提交時所做的密碼驗證或者 SSH 配置其實只是在確認用戶身份(hzh-cocong),和 user.name 和 user.email 沒有任何關系。前面說到我修改了 user.name 和 user.email 仍然無法提交就是這個原因。(HTTPS 方式克隆的第一次提交是要輸入用戶名和密碼的,這里也可以看出其是和項目配置無關的,不然怎么還要輸入用戶名,直接輸密碼不就行了。)
其實,如果是使用 HTTPS 克隆項目的話,在第一次使用 GitHub 并在提交時輸入 GitHub 的用戶名和密碼后,Git 就會把密碼保存在本地鑰匙串中(這里說的是 Mac,Windows 好久沒用了,應該也是一樣的),之后的每一次提交都是直接從鑰匙串中獲取,不需要重新輸入密碼。
所以我之前切換 GitHub 身份不一定非要使用 SSH,直接修改鑰匙串中的用戶名和密碼,或者刪除鑰匙串內容(下次提交會重新提示輸入用戶名和密碼),就可以切換身份了。
秘密
問題終于水落石出了,這是由于 GitHub 上的提交記錄顯示的是我們配置的 user.email 對應的用戶,而非真實提交的用戶。那這樣的話,如果我把本地的 user.name 和 user.email 修改成別人的,豈不是能夠偽造出一個“人人為項目做貢獻”的假象?答案是“是的”。
不過這里有個前提,你得知道別人的郵箱是什么。網上搜索了一下,很輕松地就找到了方法。這里有詳細的教程,有興趣大家可以去看一下,在 GitHub 公開倉庫中隱藏自己的私人郵箱地址,這里我簡單說明一下。
隨便尋找一個 GitHub 項目,查看最近的提交記錄,點擊查看更改的內容,如:https://github.com/hzh-test/test/commit/1b8650e55e1a0eb7b1c3c004144587178945593f
在地址末位加上 .patch,如:https://github.com/hzh-test/test/commit/1b8650e55e1a0eb7b1c3c004144587178945593f.patch
這樣,我們就拿到了別人的郵箱(這個是可以屏蔽的,個人覺得沒必要,網上大多也都沒有屏蔽)。有了郵箱就好辦了,我們直接用以下命令設置項目。
$?git?config?--local?user.name?"walterlv"$?git?config?--local?user.email?"xxxxxx@qq.com"
接下來所有的提交就都是用的我們設置的本地用戶名和郵箱,于是就有了下面這張圖。(我和 walterlv 完全不認識)
雖然我們自己操作的項目可以偽造貢獻者信息,但是對于被偽造的用戶是沒有任何影響的,其個人主頁并不會說在最近有參與別人的項目。GitLab 我試了一下,在 Git Log 中是有作用的,不過它在網頁上用的是真實提交的用戶,所以不會有 GitHub 這個問題。
思考
到這里,秘密不再是秘密。細細想來,其實這也只能是自娛自樂罷了,不過我覺得還是挺有意思的。嚴格來說,這不是 GitHub 的問題,因為這是 Git 本身擁有的功能,所以不應該算是一個問題,但總是讓人覺得有點別扭,不知道大家怎么看?
參考鏈接
在 GitHub 公開倉庫中隱藏自己的私人郵箱地址(https://blog.walterlv.com/post/remove-personal-emails-from-public-repos.html),呂毅
總結
以上是生活随笔為你收集整理的git提交到github总是要输入密码_GitHub不为人知的秘密的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php 拖动多个文件上传,dropzon
- 下一篇: mac同步linux文件夹在哪里设置,L