參與任何 Git 協作專案,核心技能在於熟練管理遠端倉庫。遠端倉庫是託管於網路上的專案版本庫,可能有多個,權限分為唯讀與可寫入。本文系統整理遠端倉庫的查看、新增、移除、資料同步、分支追蹤與詳細資訊檢視等核心操作,助您高效協作。
使用 git remote 列出所有遠端倉庫的簡短名稱。克隆專案後,預設會出現 origin,代表原始來源倉庫:
$ git clone git://github.com/schacon/ticgit.git
$ cd ticgit
$ git remote
origin
加上 -v 參數可顯示對應的抓取/推送 URL:
$ git remote -v
origin git://github.com/schacon/ticgit.git (fetch)
origin git://github.com/schacon/ticgit.git (push)
若有多個遠端倉庫(如團隊成員的 Fork),會全部列出:
$ git remote -v
bakkdoor git://github.com/bakkdoor/grit.git
cho45 git://github.com/cho45/grit.git
defunkt git://github.com/defunkt/grit.git
koke git://github.com/koke/grit.git
origin git@github.com:mojombo/grit.git
注意:只有 origin 使用 SSH URL,因此只有它具備推送權限。
執行 git remote add <shortname> <url> 即可新增:
$ git remote add pb git://github.com/paulboone/ticgit.git
$ git remote -v
origin git://github.com/schacon/ticgit.git
pb git://github.com/paulboone/ticgit.git
之後即可用 pb 代替完整網址,例如抓取 Paul 的資料:
$ git fetch pb
remote: Counting objects: 58, done.
From git://github.com/paulboone/ticgit
* [new branch] master -> pb/master
* [new branch] ticgit -> pb/ticgit
現在本地可透過 pb/master 存取 Paul 的主分支,合併或切換檢視皆可。
git fetch [remote-name] 會下載所有本地尚未擁有的資料,但不會自動合併到目前工作分支:
$ git fetch origin
若需自動抓取並合併,請使用 git pull(需先設定追蹤分支)。預設 git clone 會自動建立 master 追蹤 origin/master,因此直接執行 git pull 即可更新。
獨立-整合開發流程提示: 先建立裸倉庫
git --bare init,團隊成員各自開發測試後,再git fetch與git merge remotes/[倉庫名]/master整合,適合 Android Framework 與 AP 並行開發模式。
指令格式:git push [remote-name] [branch-name]。將本地 master 推送至 origin:
$ git push origin master
若遠端有他人更新,推送會被拒絕,需先 git fetch 並 git merge 後再推送。
git remote show [remote-name] 提供豐富資訊:
$ git remote show origin
* remote origin
URL: git@github.com:defunkt/github.git
Remote branch merged with 'git pull' while on branch issues
issues
Remote branch merged with 'git pull' while on branch master
master
New remote branches (next fetch will store in remotes/origin)
caching
Stale tracking branches (use 'git remote prune')
libwalker
walker2
Tracked remote branches
acl apiv2 dashboard2 issues master postgres
Local branch pushed with 'git push'
master:master
可得知:預設推送分支、尚未同步的遠端分支、遠端已刪除但本地仍保留的分支、git pull 會自動合併的分支,以及本地與遠端分支對應關係。
git remote rename pb paul(分支名稱同步變更為 paul/master)git remote rm paul掌握遠端倉庫管理,是 Git 協作開發的基石。善用 fetch/pull 分離抓取與合併、remote show 掌握分支狀態、適時 prune 清理失效追蹤,能讓團隊版本控制流程更順暢、安全。