HTTPS URL 和 SSH URL
在使用 git clone 項目時,可以使用倉庫的 HTTPS URL 也可以 使用 SSH URL
-
HTTPS URL,例如:
https://github.com/<username>/<repo name>.git
-
SSH URL,例如:
[email protected]:<username>/<repo name>.git
這兩種方式的主要區別在於:使用 HTTPS URL 克隆時,每次 fetch 和 push 代碼都需要輸入賬號和密碼,而使用 SSH URL 在配置好 SSH Key 後,每次 fetch 和 push 代碼都不需要輸入賬號和密碼。
初次運行 Git 前的配置
Git 環境變量
Git 提供了一個叫做 git config
的工具,專門用來配置或讀取相應的工作環境變量。而正是由這些環境變量,決定了 Git 在各個環節的具體工作方式和行爲。這些變量可以存放在以下三個不同的地方:
/etc/gitconfig
文件:系統中對所有用戶都普遍適用的配置。若使用git config
時用--system
選項,讀寫的就是這個文件。~/.gitconfig
文件:用戶目錄下的配置文件只適用於該用戶。若使用git config
時用--global
選項,讀寫的就是這個文件。- 當前項目的 Git 目錄中的配置文件(也就是工作目錄中的
.git/config
文件):這裏的配置僅僅針對當前項目有效。每一個級別的配置都會覆蓋上層的相同配置,所以.git/config
裏的配置會覆蓋/etc/gitconfig
中的同名變量。
配置用戶信息
初次運行 Git 前需要配置用戶信息,一個是你個人的用戶名稱,一個是你的電子郵件地址。這兩條配置很重要,每次 Git 提交時都會引用這兩條信息,說明是誰提交了更新,所以會隨更新內容一起被永久納入歷史記錄:
$ git config --global user.name "John Doe"
$ git config --global user.email [email protected]
如果用了 --global
選項,那麼更改的配置文件就是位於你用戶主目錄下的 ~/.gitconfig
文件,以後你所有的項目都會默認使用這裏配置的用戶信息。如果要在某個特定的項目中使用其他名字或者郵箱,只要去掉 --global
選項重新配置即可,新的設定保存在當前項目的 .git/config
文件裏。
查看配置信息
要檢查已有的配置信息,可以使用 git config --list
命令:
$ git config --list
user.name=Scott Chacon
user.email=[email protected]
color.status=auto
color.branch=auto
color.interactive=auto
color.diff=auto
...
有時候會看到重複的變量名,那就說明它們來自不同的配置文件(比如 /etc/gitconfig
和 ~/.gitconfig
),不過最終 Git 實際採用的是最後一個。
也可以直接查閱某個環境變量的設定,只要把特定的環境變量名稱跟在後面即可,例如:
$ git config user.name
Scott Chacon
檢查是否已有 SSH Key
$ cd ~/.ssh
執行 ls
或 ll
$ ls
id_rsa id_rsa.pub known_hosts
看是否存在 id_rsa 和 id_rsa.pub 文件(或者是其它文件名),如果存在說明已有 ssh key,可以直接跳過生成密鑰,其中 id_rsa 爲私鑰,id_rsa.pub 爲公鑰。
生成 SSH key
$ ssh-keygen -t rsa -C "[email protected]"
參數 | 描述 |
---|---|
-t |
指定密鑰類型,默認是rsa,可以省略 |
-C |
設置註釋文字,比如郵箱 |
-f |
指定密鑰文件存儲文件名 |
以上代碼省略了 -f
參數,因此在運行上面那條命令後會讓你輸入一個文件名,用於保存剛纔生成的 SSH key,例如:
$ ssh-keygen -t rsa -C "[email protected]"
Generating public/private rsa key pair.
Enter file in which to save the key (~/.ssh/id_rsa):
當然,你也可以不輸入文件名,直接回車使用默認文件名(推薦),那麼就會生成 id_rsa 和 id_rsa.pub 兩個密鑰文件。
接着又會提示你輸入兩次密碼(該密碼是你 push 文件的時候要輸入的密碼,而不是 github 管理者的密碼),當然,你也可以不輸入密碼,直接連續兩次按回車。那麼 push 的時候就不需要輸入密碼,直接提交到 github 上了,例如:
$ ssh-keygen -t rsa -C "[email protected]"
Generating public/private rsa key pair.
Enter file in which to save the key (~/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
連續兩次回車確認後,如下:
$ ssh-keygen -t rsa -C "[email protected]"
Generating public/private rsa key pair.
Enter file in which to save the key (~/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in ~/.ssh/id_rsa.
Your public key has been saved in ~/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:1qRb99eh19t8bqtivWkuxpNLnwKzXIg1e1u2JASyMfU [email protected]
The key's randomart image is:
+---[RSA 2048]----+
| .. |
| + .. |
| = oE |
| . * . |
| S B . . |
| o B = =. +|
| o B.O.o.+|
| o.@.++o=|
| o.OBo=*|
+----[SHA256]-----+
看到以上 save 成功的提示,說明 SSH Key 已經創建成功,提示已經說明密鑰文件已保存在 ~/.ssh
文件夾下。
添加 SSH Key 到 Github
登錄 github,點擊頭像,點擊 Settings 進入設置頁面。
然後點擊菜單欄的 SSH Key 進入頁面添加 SSH Key。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-OeV785CI-1575473857166)(Git配置SSH-Key/github-ssh-keys.png)]
點擊 New SSH Key 按鈕後進行 Key 的填寫,其中 Title 隨意, Key 爲剛剛生成的公鑰,公鑰在文件 id_rsa.pub 文件中,直接 copy 文件中的內容粘貼即可。
測試 SSH key
$ ssh -T [email protected]
當執行以上代碼時,會有一段警告,如:
The authenticity of host 'github.com (207.97.227.239)' can't be established.
# RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
# Are you sure you want to continue connecting (yes/no)?
這是正常的,直接輸入 yes 回車既可。如果你創建 SSH key 的時候設置了密碼,接下來就會提示你輸入密碼,如:
Enter passphrase for key '~/.ssh/id_rsa':
當然如果你密碼輸錯了,會再要求你輸入,直到對了爲止。注意:輸入密碼時如果輸錯一個字符就會不正確,使用刪除鍵是無法更正的。正確輸入密碼後你會看到下面這段話,如:
Hi username! You've successfully authenticated, but GitHub does not provide shell access.
如果用戶名是正確的,你已經成功設置 SSH 密鑰。如果你看到 “access denied” ,者表示拒絕訪問,那麼你就需要使用 HTTPS 去訪問,而不是 SSH 。