jas0nhuang

猴子學 git (二) 基礎遠端操作

上回學到了 Git的基本概念以及本地端基本操作,接著就要看看怎麼與遠端互動。
Git遠端可以是任何 Git伺服器,自已建立一個也可以,但是我們都是隨波逐流之人,當然還是上 GitHub找同溫層取暖,所以下面的例子都是與 GitHub互動, GitHub只是提供 Git服務的其中一個網站,還有其它如:Gitlab、Bitbucket……等網站,各有特點,可根據個人需求選擇。

GitHub網站上建立程式庫

註冊一個 GitHub帳號,登入帳號後找到 +New repository的按鍵,按下去就可以開始新建程式庫了。
設定好程式庫名稱、內容概述(非必要),選擇公開或私人(私人資料庫要付費才能使用),然後勾選是否要建立讀我檔 README.md (Git資料庫會建議創建一個讀我檔), 可選可不選。設定好之後,按下Create repository鍵就完工了。

推送(push)

接續上一篇文章的內容,我現在在本地電腦有一個程式庫,要怎麼樣讓它同步到 GitHub上面呢?使用 SSH認證為例,下面是詳細步驟:

  1. 設定遠端程式庫位址

方法一、 SSH

git remote add origin git@github.com:jas0nhuang/jas0nhuang.github.io.git

方法二、 HTTPS

git remote add origin https://github.com/jas0nhuang/jas0nhuang.github.io.git

也可以解除 remote: git remote rm 或更改 remote 的位址: git remote set-url origin
查看目前使用的 remote 位址: git remote -v

  1. (若使用SSH方法)建立 SSH金鑰

    ssh-keygen

    金鑰檔的位置只能用完整路徑,不能用 ~/代替 /home/USERNAM/,所以通常金鑰檔路徑會是 /home/USERNAME/.ssh/id_rsa,請自行以用戶名替換USERNAME,如果不需要特地更改路徑的話,只要使用預設值就好了,可選擇是否要設定密碼,安全起見最好還是設定一個密碼。

  2. 加入金鑰
    啟動 ssh-agent,然後將新建金鑰加入為此程式庫使用,這裡就可以使用 ~/ 代替家目錄了

    ssh-agent -s
    ssh-add ~/.ssh/id_rsa
  3. 將金鑰導入 GitHub
    顯示公用金鑰

    cat ~/.ssh/id_rsa.pub

    複製其內容(開頭為ssh_rsa),並加入到 GitHub

    https://github.com/settings/ssh/new
  4. 推送(push)
    完成以上設定後,在 Git已經提交(commit)的狀態下,執行:

    git push origin master

    這樣本地端的程式庫就被推送到遠端了。

擷取(fetch)、合併(merge)與擷取合併(pull)

被這這三角關係搞的很亂,其實簡單的說就是3 = 1 + 2而已。

  1. 擷取(fetch)
    單純從遠端擷取本地端所沒有的資料,它會建立一個遠端程式庫的參照(reference)分支,但是並不會把資料合併(merge)到本地端的程式庫裡。
    命令如下:

    git fetch origin master
  2. 合併(merge)
    將擷取至本地端的資料併入本地程式庫分支,命令如下:

    git merge master

    遇到衝突(conflict)時需要手動修改。這部分之後再討論。

  3. 擷取合併(pull)
    我自已是覺得如果直譯”拉取”或是”抓取”都不太明確,英文原文為了簡短使用 pull一個單字,其實它所執行的就是 fetch and merge,所以直接翻作擷取合併明確一些。
    使用方法如下:

    git pull origin master

複製(clone)遠端程式庫

單純複製導入遠端程式庫的話不一定要有 GitHub帳號,沒有帳號沒辦法推送到遠端就是了。
導入方法就是在終端機執行 git clone 專案的Github位址
以複製本站程式庫為例的話,指令就是:

git clone https://github.com/JAS0NHUANG/JAS0NHUANG.github.io.git

參考資料:
連猴子都能懂的 Git入門指南-遠端數據庫
The difference between git pull, git fetch and git clone (and git rebase))
30 天精通 Git 版本控管 (25):使用 GitHub 遠端儲存庫 - 觀念篇)
Git 基礎 - 與遠端協同工作