Git 遠端倉庫(Github)

Git 並不像 SVN 那樣有個中心伺服器。

目前我們使用到的 Git 命令都是在本地執行,如果你想通過 Git 分享你的程式碼或者與其他開發人員合作。 你就需要將資料放到一臺其他開發人員能夠連線的伺服器上。

本例使用了 Github 作為遠端倉庫,你可以先閱讀我們的 Github 簡明教程。


新增遠端庫

要新增一個新的遠端倉庫,可以指定一個簡單的名字,以便將來引用,命令格式如下:

git remote add [shortname] [url]

本例以 Github 為例作為遠端倉庫,如果你沒有 Github 可以在官網 https://github.com/註冊。

由於你的本地 Git 倉庫和 GitHub 倉庫之間的傳輸是通過SSH加密的,所以我們需要配置驗證資訊:

使用以下命令生成 SSH Key:

$ ssh-keygen -t rsa -C "[email protected]"

後面的 [email protected] 改為你在 Github 上註冊的郵箱,之後會要求確認路徑和輸入密碼,我們這使用預設的一路回車就行。

成功的話會在 ~/ 下生成 .ssh 資料夾,進去,開啟 id_rsa.pub,複製裡面的 key

$ ssh-keygen -t rsa -C "[email protected]"
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/tianqixin/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase):    # 直接回車
Enter same passphrase again:                   # 直接回車
Your identification has been saved in /Users/tianqixin/.ssh/id_rsa.
Your public key has been saved in /Users/tianqixin/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:MDKVidPTDXIQoJwoqUmI4LBAsg5XByBlrOEzkxrwARI [email protected]
The key's randomart image is:
+---[RSA 3072]----+
|E*+.+=**oo       |
|%Oo+oo=o. .      |
|%**.o.o.         |
|OO.  o o         |
|+o+     S        |
|.                |
|                 |
|                 |
|                 |
+----[SHA256]-----+

回到 github 上,進入 Account => Settings(賬戶配置)。

左邊選擇 SSH and GPG keys,然後點選 New SSH key 按鈕,title 設定標題,可以隨便填,貼上在你電腦上生成的 key。

新增成功後介面如下所示

為了驗證是否成功,輸入以下命令:

$ ssh -T [email protected]
The authenticity of host 'github.com (52.74.223.119)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes                   # 輸入 yes
Warning: Permanently added 'github.com,52.74.223.119' (RSA) to the list of known hosts.
Hi tianqixin! You've successfully authenticated, but GitHub does not provide shell access. # 成功資訊

以下命令說明我們已成功連上 Github。

之後登入後點擊" New repository " 如下圖所示:

之後在在Repository name 填入 itread01-git-test(遠端倉庫名) ,其他保持預設設定,點選"Create repository"按鈕,就成功地建立了一個新的Git倉庫:

建立成功後,顯示如下資訊:

以上資訊告訴我們可以從這個倉庫克隆出新的倉庫,也可以把本地倉庫的內容推送到GitHub倉庫。

現在,我們根據 GitHub 的提示,在本地的倉庫下執行命令:

$ mkdir itread01-git-test                     # 建立測試目錄
$ cd itread01-git-test/                       # 進入測試目錄
$ echo "# 入門教學 Git 測試" >> README.md     # 建立 README.md 檔案並寫入內容
$ ls                                        # 檢視目錄下的檔案
README
$ git init                                  # 初始化
$ git add README.md                         # 新增檔案
$ git commit -m "新增 README.md 檔案"        # 提交併備註資訊
[master (root-commit) 0205aab] 新增 README.md 檔案
 1 file changed, 1 insertion(+)
 create mode 100644 README.md

# 提交到 Github
$ git remote add origin [email protected]:tianqixin/itread01-git-test.git
$ git push -u origin master

以下命令請根據你在Github成功建立新倉庫的地方複製,而不是根據我提供的命令,因為我們的Github使用者名稱不一樣,倉庫名也不一樣。

接下來我們返回 Github 建立的倉庫,就可以看到檔案已上傳到 Github上:


檢視當前的遠端庫

要檢視當前配置有哪些遠端倉庫,可以用命令:

git remote

例項

$ git remote
origin
$ git remote -v
origin    [email protected]:tianqixin/itread01-git-test.git (fetch)
origin    [email protected]:tianqixin/itread01-git-test.git (push)

執行時加上 -v 引數,你還可以看到每個別名的實際連結地址。


提取遠端倉庫

Git 有兩個命令用來提取遠端倉庫的更新。

1、從遠端倉庫下載新分支與資料:

git fetch

該命令執行完後需要執行 git merge 遠端分支到你所在的分支。

2、從遠端倉庫提取資料並嘗試合併到當前分支:

git merge

該命令就是在執行 git fetch 之後緊接著執行 git merge 遠端分支到你所在的任意分支。

假設你配置好了一個遠端倉庫,並且你想要提取更新的資料,你可以首先執行 git fetch [alias] 告訴 Git 去獲取它有你沒有的資料,然後你可以執行 git merge [alias]/[branch] 以將伺服器上的任何更新(假設有人這時候推送到伺服器了)合併到你的當前分支。

接下來我們在 Github 上點選" README.md" 並在線修改它:

然後我們在本地更新修改。

$ git fetch origin
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
From github.com:tianqixin/itread01-git-test
   0205aab..febd8ed  master     -> origin/master

以上資訊"0205aab..febd8ed master -> origin/master" 說明 master 分支已被更新,我們可以使用以下命令將更新同步到本地:

$ git merge origin/master
Updating 0205aab..febd8ed
Fast-forward
 README.md | 1 +
 1 file changed, 1 insertion(+)

檢視 README.md 檔案內容:

$ cat README.md 
# 入門教學 Git 測試
## 第一次修改內容

推送到遠端倉庫

推送你的新分支與資料到某個遠端倉庫命令:

git push [alias] [branch]

以上命令將你的 [branch] 分支推送成為 [alias] 遠端倉庫上的 [branch] 分支,例項如下。

$ touch itread01-test.txt      # 新增檔案
$ git add itread01-test.txt 
$ git commit -m "新增到遠端"
master 69e702d] 新增到遠端
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 itread01-test.txt

$ git push origin master    # 推送到 Github

重新回到我們的 Github 倉庫,可以看到檔案已經提交上來了:


刪除遠端倉庫

刪除遠端倉庫你可以使用命令:

git remote rm [別名]

例項

$ git remote -v
origin    [email protected]:tianqixin/itread01-git-test.git (fetch)
origin    [email protected]:tianqixin/itread01-git-test.git (push)

# 新增倉庫 origin2
$ git remote add origin2 [email protected]:tianqixin/itread01-git-test.git

$ git remote -v
origin    [email protected]:tianqixin/itread01-git-test.git (fetch)
origin    [email protected]:tianqixin/itread01-git-test.git (push)
origin2    [email protected]:tianqixin/itread01-git-test.git (fetch)
origin2    [email protected]:tianqixin/itread01-git-test.git (push)

# 刪除倉庫 origin2
$ git remote rm origin2
$ git remote -v
origin    [email protected]:tianqixin/itread01-git-test.git (fetch)
origin    [email protected]:tianqixin/itread01-git-test.git (push)