git 緩存密碼導(dǎo)致的不能和遠(yuǎn)程倉庫交互unable to access... 403錯誤

一民效、出現(xiàn)問題:git push的時候沒有權(quán)限

最近在研究組件化方案的時候区岗,按照大神的步驟一步一步來,過程中遇到了很多問題眠菇。當(dāng)然這篇文章不是說組件化的边败,關(guān)于組件化的過程過幾天再做個筆記,然后分享出來捎废。

這里主要說一下 git 的 https 鏈接無法交互的問題笑窜,我在 coding (因為free,所以沒用 github )上創(chuàng)建了私有 Repo 之后根本無法 push (私有 Repo 連 clone 都不行)登疗,因為大神給的 demo 在和遠(yuǎn)程倉庫交互的時候用的是 https 鏈接排截,為什么我也用 https 鏈接就不可以呢嫌蚤?

后來嘗試使用 ssh 鏈接,然后重新配置公鑰上傳到 coding.net 上断傲,就解決了和遠(yuǎn)端倉庫交互的問題脱吱。可是換回 https 鏈接之后就不可以了(因為 ssh 鏈接會報防火墻的警告认罩,雖然沒什么大影響急凰,但是我有病,非想試試 https) 猜年。

如果 Repo 的鏈接是 https 的話,我總會得到這個錯誤:

unable to access ' https://git.coding.net/xxxx/xxxx.git/ ': The requested URL returned error: 403

當(dāng)然 https 肯定要輸入用戶名和密碼的疾忍,它就是靠這個去校驗的乔外。我也想輸入啊,可是系統(tǒng)不給我機會一罩。后來隨便在 github 上創(chuàng)建了公有庫杨幼,讓同事 clone 下來,然后 push聂渊,這個時候是需要他輸入用戶名和密碼的差购。但是第一次輸入密碼后,就不會再提醒他再次輸入了汉嗽。顯而易見是因為我的電腦緩存了我的 github 用戶名和密碼欲逃,所以才千萬次的報403錯誤。

二 饼暑、理解 git 用戶名密碼緩存原理

為了方便 git 使用 https 方式傳輸代碼的時候不用每次都輸入用戶名和密碼稳析,所以一般 git 會儲存用戶的用戶名。 儲存方式有緩存cache弓叛,保存在硬盤store彰居,和保存在鑰匙串osxkeychain中。

這篇文章翻譯了git 關(guān)于 credentials 的介紹,里面詳細(xì)說明了git 是如何尋找用戶輸入過的用戶名和密碼的,可以看一下明白 git 記錄密碼的原理撰筷。如果你不想看這篇文章陈惰,那么大概理解幾個概念就好:

1. git 去找系統(tǒng)是否緩存了用戶的密碼有三種策略:去緩存中找,去磁盤中找毕籽,去鑰匙串中找抬闯。

2. /Users/xxx/.gitconfig 文件中(這個文件如果沒設(shè)置過git 的全局配置可能會不存在),配置了git 到底選擇哪個策略去找用戶名和密碼关筒。

3. 通過編輯 .gitconfig 文件画髓,credential.helper = store/cache/osxkeychain 來修改 git 緩存策略。

理解了上面的概念后可以執(zhí)行這個命令查看自己系統(tǒng)支持的crendential(憑證)平委,

git help -a | grep credential

得到結(jié)果:


本機git支持的緩存策略.png

然后可以執(zhí)行

git config --list

查看自己電腦的 git 的全局配置,可以看到credential.helper=(你自己電腦的配置)

如果你切換到 git 項目的文件夾里再使用 git config --list 可以看到對應(yīng)項目的配置信息奈虾,紅色是電腦的 global credential 配置,綠色的是當(dāng)前 git 項目的 credential 配置(可以多個)

git config.png

三、解決問題

1. 清空配置

知道了這些之后肉微,再解決這個問題就簡單了匾鸥,既然 git 是依靠credential.helper 配置去找用戶名密碼,那我直接不用這個配置不就會要求重新輸入用戶名和密碼了嗎碉纳? 打開 /Users/xxx/.gitconfig 文件勿负,如果顯示隱藏文件后還是找不到這個文件,那么可以使用以下任意的命令劳曹,成功后會在你的HOME路徑下出現(xiàn)這個文件奴愉,

// 配置git 的缺省編輯器 例如:emacs
   $ git config --global core.editor emacs

//配置git 的用戶名和郵箱
  $ git config --global user.name "xxxxxx"
  $ git config --global user.email "xxxx@.com"

執(zhí)行這些命令后就能生成.gitconfig 配置文件,然后文本編輯器打開.gitconfig文件,清除里面的命令行生成的內(nèi)容铁孵。

如果你的電腦本來就有.gitconfig文件, 找到下面這句話刪除锭硼,保存退出。

[credential]   helper = xxx

這個時候輸入命令

git config credential.helper

查看本機的credential 是否已經(jīng)被清空蜕劝。

如果輸入了 git config credential.helper 命令之后還是出現(xiàn)了osxkeychain檀头, store 或者 cache 等,說明 git 的配置還是沒有被清空岖沛,我參考了stackOverFlow上這個問題 有人給了這樣一個命令查看 credential.helper 所在的文件目錄(可能一個電腦上有多個.gitconfig文件)暑始,

git config --show-origin --get credential.helper

file:/Applications/Xcode.app/Contents/Developer/usr/share/git-core/gitconfig    osxkeychain

如果你的Mac上還有Xcode的話,那么Xcode中還會有一個.gitconfig文件婴削,找出他然后打開廊镜,清空[credential]。

再次輸入

git config credential.helper 

如果沒有任何反應(yīng)唉俗,那么 credential 就是已經(jīng)清空了期升,這個時候你無論在任何依托 git 的代碼托管網(wǎng)站上 push 都會要求你輸入用戶名和密碼了,而且每次都會要求你輸入互躬,是不是又有新的煩惱了呢播赁?

2. 重新配置

理解了git 保存密碼的原理,那我們可以按照自己的想法設(shè)置了吼渡,如上所述容为,可以設(shè)置成cache,store寺酪,keychain坎背,這里我說下保存在磁盤中(store)和鑰匙串中(keychain)兩種方式。

  • 配置成store

命令

git  config --global  credential.helper  store 

或者 /Users/xxx/.gitconfig 打開.gitsonfig直接修改文件credential.helper=store

然后第一次push 的時候會提示輸入用戶名密碼寄雀,輸入完成之后/Users/xxx/ 文件夾下會生成一個新的文件.git-credentials得滤,雙擊打開,里面保存了你的用戶名密碼等信息:

https://用戶名:密碼@網(wǎng)址

但是這種儲存方式盒犹,在本地只會儲存一個用戶名和密碼懂更,例如我本地.git-credentials文件的內(nèi)容是

https://用戶名1:密碼1@git.coding.net

那我如果想 push 到 github 上眨业,又要重新輸入用戶名密碼,你可以再次在 .git-credentials 文件中添加一個 url沮协,格式是一樣的龄捡,這次的用戶名和密碼改成你的 github 用戶名和密碼

https://用戶名2:密碼2@github.com

注意:如果在設(shè)置成global store之前/Users/xxx/ 文件夾中如果已經(jīng)有了.git-credentials 文件,最好先刪除慷暂,防止系統(tǒng)自動去那里尋找用戶名密碼聘殖。

  • 配置成osxkeychain

命令

git  config --global  credential.helper  osxkeychain

也或者/Users/xxx/.gitconfig 打開 .gitconfig 直接修改文件。

這個時候 git 是從你的鑰匙串中訪問儲存的密碼行瑞,同理如果第一次在鑰匙串中沒有找到用戶名密碼奸腺,則要求你輸入,輸入之后下次就不用再次輸入啦血久。

與 store 方式不同的是(你的每個平臺用戶名和密碼都不一樣):
假如第一次 push 到 github突照,那么 keychain 記錄了 github 的用戶名密碼,
第二次你想推送 coding洋魂,那么 keychain 沒有 coding 的用戶名密碼,就會要求你再次輸入喜鼓。只是 store 的方式????? 我們需要手動添加 url副砍,這里不用了。

我們可以查看 Mac 上的鑰匙串庄岖,push 一次后就會新出先一個對應(yīng)網(wǎng)站的鑰匙串豁翎,你也可以雙擊訪問,查看密碼隅忿。

注意: 如果在/Users/xxx/ 文件夾中已經(jīng)有了 .git-credentials 文件心剥,要先刪除,否則系統(tǒng)自動去那里尋找用戶名密碼背桐。

這樣就解決了git 緩存密碼后所帶來的問題优烧。希望對你有所幫助!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末链峭,一起剝皮案震驚了整個濱河市畦娄,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌弊仪,老刑警劉巖熙卡,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異励饵,居然都是意外死亡驳癌,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門役听,熙熙樓的掌柜王于貴愁眉苦臉地迎上來颓鲜,“玉大人表窘,你說我怎么就攤上這事厨内±福” “怎么了誊薄?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵钞护,是天一觀的道長懂拾。 經(jīng)常有香客問我啡莉,道長逃默,這世上最難降的妖魔是什么攀圈? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任昭娩,我火速辦了婚禮凛篙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘栏渺。我一直安慰自己呛梆,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布磕诊。 她就那樣靜靜地躺著填物,像睡著了一般。 火紅的嫁衣襯著肌膚如雪霎终。 梳的紋絲不亂的頭發(fā)上滞磺,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天,我揣著相機與錄音莱褒,去河邊找鬼击困。 笑死,一個胖子當(dāng)著我的面吹牛广凸,可吹牛的內(nèi)容都是我干的阅茶。 我是一名探鬼主播,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼谅海,長吁一口氣:“原來是場噩夢啊……” “哼脸哀!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起扭吁,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤企蹭,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后智末,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體谅摄,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年系馆,在試婚紗的時候發(fā)現(xiàn)自己被綠了送漠。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡由蘑,死狀恐怖闽寡,靈堂內(nèi)的尸體忽然破棺而出代兵,到底是詐尸還是另有隱情,我是刑警寧澤爷狈,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布植影,位于F島的核電站,受9級特大地震影響涎永,放射性物質(zhì)發(fā)生泄漏思币。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一羡微、第九天 我趴在偏房一處隱蔽的房頂上張望谷饿。 院中可真熱鬧,春花似錦妈倔、人聲如沸博投。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽毅哗。三九已至,卻和暖如春捧挺,著一層夾襖步出監(jiān)牢的瞬間虑绵,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工松忍, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蒸殿,地道東北人筷厘。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓鸣峭,卻偏偏與公主長得像,于是被迫代替她去往敵國和親酥艳。 傳聞我的和親對象是個殘疾皇子摊溶,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,976評論 2 355

推薦閱讀更多精彩內(nèi)容