Skip to main content

Remote repository

Git repository 除了本機以外,還可以是遠端 repository ,例如雲端 GitHub、Gitlab、Bitbucket,或者自架的 Git Server。

作為版本控制用途,Remote repository 不是必要的,除非想要多人協作開發共同的專案。

Clone from remote repo.
# Specified version
git clone -b 8.3.0 https://github.com/OpenSIPS/opensips-cp.git /var/www/opensips-cp
Git remote

從遠端儲存庫下載專案或要推送本地專案至遠端儲存庫時,用來檢視、修改遠端儲存庫位址。

# Show the configuration of the remote repository
git remote -v

origin	https://github.com/a-lang/sshto.git (fetch)
origin	https://github.com/a-lang/sshto.git (push)

# Get more information
git remote show origin

* 遠端 origin
  取得位址:https://github.com/a-lang/sshto.git
  推送位址:https://github.com/a-lang/sshto.git
  HEAD 分支:master
  遠端分支:
    master 已追蹤
  為 'git pull' 設定的本機分支:
    master 與遠端 master 合併
  為 'git push' 設定的本機引用:
    master 推送至 master (最新)
Push

將本機 repository 的更新推送到遠端 Git server

git push
Pull

拉取遠端 Git server 的更新至本機 repository 

cd my_proj
git pull
避免每次詢問密碼

輸入一次密碼,可以暫存系統 15 分鐘

git config --global credential.helper cache

SSH Key Authentication
# 建立 ssh-key
# 預設路徑: ~/.ssh/id_rsa (private key) , ~/.ssh/id_rsa.pub (public-key)
ssh-keygen -t rsa -b 4096 -C "alang@my-linux-desktop"

# Gitlab 網站匯入 public ssh-key
# 測試 ssh key authentication
# 如果輸出 Welcome to GitLab, @alang! 表示連線認證成功
ssh -T git@gitlab.shurafom.eu

# 下載專案
# NOTE: 位址必須是 git@XXX.xxx.xxx 開頭。
# 如果使用 https:// 則必須改用 Personal Token 認證方式  
git clone git@gitlab.shurafom.eu:myproject/myprog.git
Fetch new changes

Git 本地庫與遠端庫並不會自動保持同步,而是用指令 git fetch 手動將遠端庫的所有 branches 異動 (commit) 紀錄更新至本地端。注意:這不會更動本地庫的 branches  資料(與 git pull 不同)

如何知道遠端儲存庫有其他更新?

git remote show origin
* remote origin
  Fetch URL: https://github.com/redquinoa/health-checks.git
  Push  URL: https://github.com/redquinoa/health-checks.git
  HEAD branch: master
  Remote branch:
    master tracked
  Local branch configured for 'git pull':
    master merges with remote master
  Local ref configured for 'git push':
    master pushes to master (local out of date)

這行 master pushes to master (local out of date) 表示遠端庫有其他的更新。

更新遠端庫 branches 異動紀錄至本地端

# 更新遠端 branches 異動紀錄至 local
git fetch

# 檢視遠端 branch 的 commit log 是否有更新
git log origin/master