1. 程式人生 > >聊下 git 使用前的一些注意事項

聊下 git 使用前的一些注意事項

連線方式https、ssh

在使用git的時候,不管你的伺服器是開源平臺github還是私服gitlab,你都需要clone倉庫到本地,這個clone的時候就需要你選擇連線方式。這個連線方式決定了你與伺服器互動的時候以一個什麼協議進行。如果你沒搞清楚這兩種方式,可能你在使用的時候會很困惑,別人在push程式碼的時候沒有提示輸入賬號密碼,而你卻有,至少我當初有過這個問題。

可選擇的協議有https、ssh兩種,這從git repository倉庫的地址就能分辨出來。

1

這是我6年前的開源專案,套打元件。拿這個做例子,紅色範圍內的地址就是ssh的連線地址。你可以通過”Use HTTPS”切換使用https連線地址。

2

3

這是兩種方式連線git伺服器。在clone的時候地址就決定了你的互動協議。這兩種方式與git伺服器互動的區別體現在你每次push程式碼的時候。https協議在你每次push的時候都要求你輸入git賬號密碼,這種方式一般多用於那些你很少push程式碼的場景。ssh是用於那些工程開發,你需要頻繁push程式碼的場景。

https的賬號就是你的git伺服器給你分配的,每次push的時候會有一個文字框提示你輸入。

ssh的使用需要你的倉庫管理員為你設定一個公鑰,這樣你每次push程式碼的時候git伺服器才知道你是誰。這是採用RSA(公鑰加密演算法)也稱非對稱加密演算法,RSA產生一對金鑰(公鑰和私鑰),你只需要將你的公鑰提交到git伺服器上即可。當你每次push程式碼的時候就會使用這對金鑰來加解密且驗證身份。

你可能會問,為什麼我不是把私鑰設定到伺服器中而是公鑰,如果你真的這麼想了,也不奇怪。但是你再進一步想,RSA的演算法執行順序就知道了。加密和解密的邏輯是不同的,你提供反了金鑰是執行不了的。

git客戶端生成ssh金鑰對網上有很多文章,這裡就不重複了,主要使用ssh-keygen命令。生成好了之後在你的.ssh目錄下會有一對金鑰檔案。

4

5

複製.pub文字檔案中的公鑰,到你的github伺服器上設定,在settings/profile下。

6

7

新增一個新的sshkey。每一個sshkey的使用都有時間記錄。如果沒有被使用過,ssh的綠色鑰匙是灰色的。這樣你就完成了git連線遠端倉庫,且可以隨時push程式碼了。開始你的git之旅吧。

git user.name、user.email、commit log 中的賬號洩露問題

在使用git進行一系列開發之前,你需要設定下當前git客戶端所代表使用者是誰。這樣你在commit程式碼的時候,commitlog中會顯示Author是誰,郵箱是誰。

Author: plen-wang <[email protected]>

那麼怎麼設定使用者名稱、郵箱尼。你可能使用git config global user.name、git config global user.email來設定全域性的賬號和郵箱。

這麼做沒錯,但是這麼做有一個問題,就是當你切換不同的git repository的時候你的commitlog就有問題了。因為你設定的是全域性使用者名稱和郵箱,想想看如果你在公司使用的是gitlab,然後的你的使用者名稱和郵箱是公司內部的,突然你切換到外部的github的倉庫上,進行程式碼開發和commit,想想看你的commitlog裡會出現什麼情況。

在git客戶端裡有兩種使用者名稱和郵箱,一個是全域性,也是預設的。一個是倉庫級別的。所以當你使用global作為你平時的預設設定時沒關係。但是一旦clone一個新的倉庫的時候記得設定當前倉庫級別的使用者名稱、郵箱。

檢視全域性使用者名稱、郵箱,git config --global user.name,git config --global user.email
檢視當前倉庫的使用者名稱、郵箱,git config user.name,git config user.email

設定全域性使用者名稱、郵箱,git config --global user.name “plen-wang”,git config –global user.email “[email protected]

設定當前倉庫的使用者名稱、郵箱,git config user.name “plen-wang-xxx”,git config user.email “[email protected]

你可以通過git config --list 來檢視所有的配置

8

這裡面會出現兩組user.name、user.email 的設定。最上面的北色框裡的都是全域性配置,下面的白色框裡的是當前倉庫的配置。你可以通過檢視remote.origin.url來識別。