猴子學 git (二) 基礎遠端操作
上回學到了 Git的基本概念以及本地端基本操作,接著就要看看怎麼與遠端互動。
Git遠端可以是任何 Git伺服器,自已建立一個也可以,但是我們都是隨波逐流之人,當然還是上 GitHub找同溫層取暖,所以下面的例子都是與 GitHub互動, GitHub只是提供 Git服務的其中一個網站,還有其它如:Gitlab、Bitbucket……等網站,各有特點,可根據個人需求選擇。
GitHub網站上建立程式庫
註冊一個 GitHub帳號,登入帳號後找到 +New repository的按鍵,按下去就可以開始新建程式庫了。
設定好程式庫名稱、內容概述(非必要),選擇公開或私人(私人資料庫要付費才能使用),然後勾選是否要建立讀我檔 README.md (Git資料庫會建議創建一個讀我檔), 可選可不選。設定好之後,按下Create repository鍵就完工了。
推送(push)
接續上一篇文章的內容,我現在在本地電腦有一個程式庫,要怎麼樣讓它同步到 GitHub上面呢?使用 SSH認證為例,下面是詳細步驟:
- 設定遠端程式庫位址
方法一、 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
(若使用SSH方法)建立 SSH金鑰
ssh-keygen
金鑰檔的位置只能用完整路徑,不能用 ~/代替 /home/USERNAM/,所以通常金鑰檔路徑會是 /home/USERNAME/.ssh/id_rsa,請自行以用戶名替換USERNAME,如果不需要特地更改路徑的話,只要使用預設值就好了,可選擇是否要設定密碼,安全起見最好還是設定一個密碼。
加入金鑰
啟動 ssh-agent,然後將新建金鑰加入為此程式庫使用,這裡就可以使用 ~/ 代替家目錄了ssh-agent -s
ssh-add ~/.ssh/id_rsa將金鑰導入 GitHub
顯示公用金鑰cat ~/.ssh/id_rsa.pub
複製其內容(開頭為ssh_rsa),並加入到 GitHub
https://github.com/settings/ssh/new
推送(push)
完成以上設定後,在 Git已經提交(commit)的狀態下,執行:git push origin master
這樣本地端的程式庫就被推送到遠端了。
擷取(fetch)、合併(merge)與擷取合併(pull)
被這這三角關係搞的很亂,其實簡單的說就是3 = 1 + 2而已。
擷取(fetch)
單純從遠端擷取本地端所沒有的資料,它會建立一個遠端程式庫的參照(reference)分支,但是並不會把資料合併(merge)到本地端的程式庫裡。
命令如下:git fetch origin master
合併(merge)
將擷取至本地端的資料併入本地程式庫分支,命令如下:git merge master
遇到衝突(conflict)時需要手動修改。這部分之後再討論。
擷取合併(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 基礎 - 與遠端協同工作