git 鏈接 github 遠程倉庫

0. 前言


github 設置添加 SSH

不少朋友在用 github 管理項目的時候,都是直接使用 https url 克隆到本地,固然也有些人使用 SSH url 克隆到本地。然而,爲何絕大多數人會使用 https url 克隆呢?
這是由於,使用 https url 克隆對初學者來講會比較方便,複製 https url 而後到 git Bash 裏面直接用 clone 命令克隆到本地就行了。而使用 SSH url 克隆卻須要在克隆以前先配置和添加好 SSH key 。
所以,若是你想要使用 SSH url 克隆的話,你必須是這個項目的擁有者。不然你是沒法添加 SSH key 的。git

https 和 SSH 的區別:

  1. 前者能夠隨意克隆 github 上的項目,而不論是誰的;然後者則是你必須是你要克隆的項目的擁有者或管理員,且須要先添加 SSH key ,不然沒法克隆。
  2. https url 在 push 的時候是須要驗證用戶名和密碼的;而 SSH 在 push 的時候,是不須要輸入用戶名的,若是配置 SSH key 的時候設置了密碼,則須要輸入密碼的,不然直接是不須要輸入密碼的。

1. 在 github 上添加 SSH key 的步驟:


1. 首先須要檢查你電腦是否已經有 SSH key

運行 git Bash 客戶端,輸入以下代碼:github

1
2
$ cd ~/.ssh
$ ls

 

這兩個命令就是檢查是否已經存在 id_rsa.pub 或 id_dsa.pub 文件,若是文件已經存在,那麼你能夠跳過步驟 2,直接進入步驟 3。shell

2. 建立一個 SSH key

$ ssh-keygen -t rsa -C "your_email@example.com"
代碼參數含義:ssh

-t 指定密鑰類型,默認是 rsa ,能夠省略。
-C 設置註釋文字,好比郵箱。
-f 指定密鑰文件存儲文件名。編輯器

以上代碼省略了 -f 參數,所以,運行上面那條命令後會讓你輸入一個文件名,用於保存剛纔生成的 SSH key 代碼,如:分佈式

Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/you/.ssh/id_rsa): [Press enter]ide

固然,你也能夠按 enter 不輸入文件名,使用默認文件名(推薦),那麼就會生成 id_rsa 和 id_rsa.pub 兩個祕鑰文件。測試

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

固然,你也能夠不輸入密碼,直接按回車。那麼 push 的時候就不須要輸入密碼,直接提交到 github 上了,如:spa

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

接下來,就會顯示以下代碼提示,如:

1
2
3
4
Your identification has been saved in /c/Users/you/.ssh/id_rsa.
Your public key has been saved in /c/Users/you/.ssh/id_rsa.pub.
The key fingerprint is:
01:0f:f4:3b:ca:85:d6:17:a1:7d:f0:68:9d:f0:a2:db your_email@example.com

 

當你看到上面這段代碼的時候,那就說明,你的 SSH key 已經建立成功,你只須要添加到 github 的 SSH key 上就能夠了。

3. 添加你的 SSH key 到 github 上面去

  1. 首先你須要拷貝 id_rsa.pub 文件的內容,你能夠用編輯器打開文件複製,也能夠用 git 命令複製該文件的內容,如:

$ clip < ~/.ssh/id_rsa.pub

  1. 登陸你的 github 帳號,從又上角的設置( Account Settings )進入,而後點擊菜單欄的 SSH key 進入頁面添加 SSH key。

  2. 點擊 Add SSH key 按鈕添加一個 SSH key 。把你複製的 SSH key 代碼粘貼到 key 所對應的輸入框中,記得 SSH key 代碼的先後不要留有空格或者回車。固然,上面的 Title 所對應的輸入框你也能夠輸入一個該 SSH key 顯示在 github 上的一個別名。默認的會使用你的郵件名稱。

4. 測試一下該 SSH key

在 git Bash 中輸入如下代碼

$ ssh -T git@github.com

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

1
2
3
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 '/c/Users/Administrator/.ssh/id_rsa':

固然若是你密碼輸錯了,會再要求你輸入,知道對了爲止。

注意:輸入密碼時若是輸錯一個字就會不正確,使用刪除鍵是沒法更正的。

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

1
2
Hi username! You've successfully authenticated, but GitHub does not
provide shell access.

 

若是用戶名是正確的,你已經成功設置 SSH 密鑰。若是你看到 「access denied」 ,者表示拒絕訪問,那麼你就須要使用 https 去訪問,而不是 SSH 。

2. 遠程倉庫操做


1. 本地倉庫推送到遠程倉庫

如今的情景是:咱們已經在本地建立了一個 Git 倉庫後,又想在 github 建立一個 Git 倉庫,而且但願這兩個倉庫進行遠程同步,這樣 github 的倉庫能夠做爲備份,又能夠其餘人經過該倉庫來協做。

首先,登陸 github 上,而後在右上角找到 「create a new repo」 建立一個新的倉庫。
在 Repository name 填入 testgit,其餘保持默認設置,點擊 「Create repository」 按鈕,就成功地建立了一個新的 Git 倉庫:

目前,在 GitHub 上的這個 testgit 倉庫仍是空的,GitHub 告訴咱們,能夠從這個倉庫克隆出新的倉庫,也能夠把一個已有的本地倉庫與之關聯,而後,把本地倉庫的內容推送到 GitHub 倉庫。
如今,咱們根據 GitHub 的提示,在本地的 testgit 倉庫下運行命令:
$ git remote add origin https://github.com/username/testgit.git
把本地庫的內容推送到遠程,使用命令:
$ git push -u origin master
若是本地倉庫沒有過 commit, 那麼此時就會報錯:

1
2
3
$ git push -u origin master
error: src refspec master does not match any.
error: failed to push some refs to 'git@github.com:username/testgit.git'

 

緣由:
本地倉庫爲空
解決方法:

  1. 使用命令 git add 添加文件。
  2. 使用命令 git commit 提交修改。

git push 命令其實是把當前分支 master 推送到遠程。因爲遠程庫是空的,咱們第一次推送 master 分支時,加上了 –u 參數,Git 不但會把本地的 master 分支內容推送的遠程新的 master 分支,還會把本地的 master 分支和遠程的 master 分支關聯起來,在之後的推送或者拉取時就能夠簡化命令。
推送成功後,能夠馬上在 github 頁面中看到遠程庫的內容已經和本地如出一轍了。
從如今起,只要本地做了提交,就能夠經過以下命令:
$ git push origin master
把本地 master 分支的最新修改推送到 github 上了,如今你就擁有了真正的分佈式版本庫了。

2. 遠程倉庫克隆到本地倉庫

上面咱們瞭解了先有本地庫,後有遠程庫時候,如何關聯遠程庫。
如今咱們想,假如遠程庫有新的內容了,我想克隆到本地來 如何克隆呢?
首先,登陸 github,建立一個新的倉庫,名字叫 testgit2. 以下:

如今,遠程庫已經準備好了,下一步是使用命令 git clone 克隆一個本地庫了。以下所示:
$ git clone git@github.com:username/testgit2.git
接着在我本地目錄下 生成 testgit2 目錄了,以下所示:

接下來在本地上對 testgit2 的修改就能夠經過命令 git push 推送到遠程倉庫。

相關文章
相關標籤/搜索