1. 程式人生 > >基於SSH協議clone GitHub遠端倉庫到本地-git

基於SSH協議clone GitHub遠端倉庫到本地-git

輸入框 setting 生成 ready 可能 取代 初學 into etc

經常逛 GitHub 的可能都知道,在 clone 遠端倉庫的時候,會有兩個選項,如下圖:

技術分享圖片

技術分享圖片

首先我們來說明一下兩種方式的區別。

使用 HTTPS url 克隆對初學者來說會比較方便,復制HTTPS url 然後到 git Bash 裏面直接用 clone 命令克隆到本地就好了,但是每次 fetch 和 push 代碼都需要輸入賬號和密碼,這也是HTTPS 方式的麻煩之處。而使用 SSH url 克隆卻需要在克隆之前先配置和添加好SSH key,因此,如果你想要使用SSH url克隆的話,你必須是這個項目的擁有者或管理員。否則你是無法添加 SSH key 的,另外 SSH 默認是每次 fetch 和 push 代碼都不需要輸入賬號和密碼,如果你想要每次都輸入賬號密碼才能進行 fetch 和 push 也可以另外進行設置,但一般人不這麽做。

以下對如何配置 SSH key 和 使用 SSH url 克隆作詳細說明:(以下操作均在 Terminal 中進行)

① 查看自己是否已經創建了 SSH key

[objc] view plain copy
  1. $ cd ~/.ssh
  2. $ ls

這兩個命令就是檢查是否已經存在 id_rsa.pub 或 id_dsa.pub 文件,如果文件已經存在,那麽你可以跳過步驟 2,直接進入步驟 3。

如果沒有 SSH key ,是不會存在該文件夾的。

如果不存在 SSH key,或是 SSH key 不可用,那麽備份並刪除該文件夾,重新生成 SSH key 。(進入步驟 2)

② 生成秘鑰

[objc] view plain copy
  1. $ ssh-keygen -t rsa -C "[email protected]"

-t 指定密鑰類型,默認是 rsa ,可以省略。

-C 設置註釋文字,比如郵箱。(一定要是關聯你 GitHub 的註冊郵箱,也就是用戶名)

-f 指定密鑰文件存儲文件名。

在上面的命令行中我省略了 -f 參數,因此,運行上面那條命令後會讓你輸入一個文件名,用於保存剛才生成的 SSH key 代碼,如下:

[objc] view plain copy
  1. Generating public/private rsa key pair.
  2. Enter file in which to save the key (/Users/bpb/.ssh/id_rsa):

當然,你也可以不輸入文件名,使用默認文件名(推薦),那麽就會生成 id_rsa 和 id_rsa.pub 兩個秘鑰文件。

[objc] view plain copy
  1. /Users/bpb/.ssh/id_rsa already exists.
  2. Overwrite (y/n)? y<span style="font-size:14px;">
  3. </span>

接著又會提示你輸入兩次密碼(該密碼是你 push 文件的時候要輸入的密碼,而不是 GitHub 管理者的密碼),

GitHub

[objc] view plain copy
  1. Enter passphrase (empty for no passphrase):
  2. Enter same passphrase again:

之後會顯示如下提示,表示 SSH key 已經創建成功。

[objc] view plain copy
  1. Your identification has been saved in /Users/bpb/.ssh/id_rsa.
  2. Your public key has been saved in /Users/bpb/.ssh/id_rsa.pub.
  3. The key fingerprint is:
  4. SHA256:rxneWu2eUcd6M5DKFt2J9aeDZhxpNczajN89HRoqZZg CoderZYWang@yeah.net
  5. The key‘s randomart image is:
  6. +---[RSA 4096]----+
  7. | |
  8. | o |
  9. | =. |
  10. | o .B=oo|
  11. | SE +**++=|
  12. | .+++=+==|
  13. | ..o=B.=+=|
  14. | . *o+ o o+|
  15. | =...+ |
  16. +----[SHA256]-----+

③ 添加 SSH key 到 GitHub 上去

確保啟用 SSH 代理:

[objc] view plain copy
  1. $ eval "$(ssh-agent -s)"

為 SSH key 啟用 SSH 代理

[objc] view plain copy
  1. $ ssh-add ~/.ssh/id_rsa

如果你使用一個現有的SSH密鑰,而不是產生一個新的SSH密鑰,您需要與您現有的私鑰文件名命令取代 id_rsa。(當然使用舊密鑰就不需要執行上面一行命令行)

拷貝 id_rsa.pub 文件的內容,你可以用編輯器打開文件復制,也可以用 git 命令復制該文件的內容,如下:

Mac 端 copy 操作:

[objc] view plain copy
  1. $ pbcopy < ~/.ssh/id_rsa.pub
  2. # Copies the contents of the id_rsa.pub file to your clipboard

Windows 端 copy 操作:

[objc] view plain copy
  1. $ clip < ~/.ssh/id_rsa.pub
  2. # Copies the contents of the id_rsa.pub file to your clipboard

Linux 端操作:

[objc] view plain copy
  1. sudo apt-get install xclip
  2. # Downloads and installs xclip. If you don‘t have `apt-get`, you might need to use another installer (like `yum`)
[objc] view plain copy
  1. xclip -sel clip < ~/.ssh/id_rsa.pub
  2. # Copies the contents of the id_rsa.pub file to your clipboard

登錄你的github賬號,從右上角的設置(Account Setting )進入,然後點擊菜單欄的 SSH key 進入頁面添加 SSH key。

點擊 Add SSH key 按鈕添加一個 SSH key 。把你復制的 SSH key 代碼粘貼到 key 所對應的輸入框中,記得 SSH key 代碼的前後不要留有空格或者回車。當然,上面的 Title 所對應的輸入框你也可以輸入一個該 SSH key 顯示在 github 上的一個別名。默認的會使用你的郵件名稱。如下圖:

技術分享圖片

④ 測試你的 SSH key 是否配置成功

[objc] view plain copy
  1. $ ssh -T git@github.com

當你輸入以上代碼時,會有一段警告代碼,如:

[objc] view plain copy
  1. The authenticity of host ‘github.com (207.97.227.239)‘ can‘t be established.
  2. # RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
  3. # Are you sure you want to continue connecting (yes/no)?

這是正常的,你輸入 yes 回車既可。如果你創建 SSH key 的時候設置了密碼,接下來就會提示你輸入密碼,如:

[objc] view plain copy
  1. Enter passphrase for key ‘/c/Users/Administrator/.ssh/id_rsa‘:

當然如果你密碼輸錯了,會再要求你輸入,知道對了為止。

註意:輸入密碼時如果輸錯一個字就會不正確,使用刪除鍵是無法更正的。

密碼正確後你會看到下面這段話,如下:

[objc] view plain copy
  1. Enter passphrase for key ‘/c/Users/Administrator/.ssh/id_rsa‘:

⑤ clone 遠端倉庫到本地吧 ~

[objc] view plain copy
  1. $ git clone git@github.com:kahowu/benpaobao_ios.git

然後看到如下命令行:

[objc] view plain copy
  1. Cloning into ‘XXXXXXX‘...
  2. remote: Counting objects: 5133, done.
  3. remote: Compressing objects: 100% (24/24), done.
  4. Receiving objects: 43% (2224/5133), 4.84 MiB | 1024 bytes/s
  5. remote: Total 5133 (delta 0), reused 0 (delta 0), pack-reused 5109
  6. Receiving objects: 100% (5133/5133), 26.98 MiB | 75.00 KiB/s, done.
  7. Resolving deltas: 100% (2922/2922), done.
  8. Checking connectivity... done.

然後切換到本地項目的根目錄下,拉取遠端倉庫的分支(Vayne):

[objc] view plain copy
  1. $ git fetch origin Vayne

接著看到如下命令行:

[objc] view plain copy
  1. remote: Counting objects: 29, done.
  2. remote: Compressing objects: 100% (29/29), done.
  3. remote: Total 29 (delta 1), reused 0 (delta 0), pack-reused 0
  4. Unpacking objects: 100% (29/29), done.
  5. From github.com:kahowu/benpaobao_ios
  6. * branch Vayne -> FETCH_HEAD
  7. 74b0c3f..40beaf1 Vayne -> origin/Vayne

查看本地已經存在的遠端分支:(發現只有一個 master 分支)

[objc] view plain copy
  1. git branch
  2. * master

新建本地 Vayne 分支,然後把拉取下來的遠端 Vayne 分支進行合並:

註意下列命令行,是相對於我們拉下來的 Vayne 遠端分支作為基準進行創建的 Vayne 本地分支,也就是說創建出來的本地 Vayne 分支是和遠端的 Vayne 分支的代碼保持一致的。和普通創建本地分支有一些小小的差異。(一般我們創建的出來的本地分支是基於當前所在的本地分支進行創建的,在此處也就是 master。但是由於我們在後面拼接了 origin/Vayne ,所以說此處並不是基於 master 分支創建的 Vayne 分支)

[objc] view plain copy
  1. git checkout -b Vayne origin/Vayne

上面一句代碼可以直接運行,不用 fetch,但是 fetch 的好處是可以先暫時拉取並查看。當然現在本地也沒有 Vayne 分支,所以直接拉取也是合適的。

合並成功:

[objc] view plain copy
    1. Branch Vayne set up to track remote branch Vayne from origin.
    2. Switched to a new branch ‘Vayne‘

基於SSH協議clone GitHub遠端倉庫到本地-git