Git 系列教程(8)- 遠端倉庫的使用

小菠蘿測試筆記發表於2021-05-16

檢視遠端倉庫

  • 如果想檢視你已經配置的遠端倉庫伺服器,可以執行 git remote 命令,它會列出你指定的每一個遠端伺服器的名稱
  • 如果是剛 clone 下來的自己的庫,能看到 origin,這是 Git 起的預設名字
$ git clone https://github.com/schacon/ticgit
Cloning into 'ticgit'...
remote: Reusing existing pack: 1857, done.
remote: Total 1857 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (1857/1857), 374.35 KiB | 268.00 KiB/s, done.
Resolving deltas: 100% (772/772), done.
Checking connectivity... done.
$ cd ticgit
$ git remote
origin

 

-v 選項

會顯示需要讀寫遠端倉庫使用的 Git 的 URL和名稱(origin)

git remote -v
origin    https://github.com/schacon/ticgit (fetch)
origin    https://github.com/schacon/ticgit (push)

 

栗子

  • 若遠端倉庫不止一個,該命令會將它們全部列出
  • 與他人合作,擁有多個遠端倉庫的倉庫
$ cd grit
$ git remote -v
bakkdoor  https://github.com/bakkdoor/grit (fetch)
bakkdoor  https://github.com/bakkdoor/grit (push)
cho45     https://github.com/cho45/grit (fetch)
cho45     https://github.com/cho45/grit (push)
defunkt   https://github.com/defunkt/grit (fetch)
defunkt   https://github.com/defunkt/grit (push)
koke      git://github.com/koke/grit.git (fetch)
koke      git://github.com/koke/grit.git (push)
origin    git@github.com:mojombo/grit.git (fetch)
origin    git@github.com:mojombo/grit.git (push)

  

新增遠端倉庫

git remote add <shortname> <url>

 

新增一個新的遠端 Git 倉庫,同時指定一個名稱

polo@B-J5D1MD6R-2312 watermarker % git remote -v
origin    git@gitee.com:poloyy/watermarker.git (fetch)
origin    git@gitee.com:poloyy/watermarker.git (push)

polo@B-J5D1MD6R-2312 watermarker % git  remote add test  git@gitee.com:testyy/waterm
arker.git

polo@B-J5D1MD6R-2312 watermarker % git remote -v
origin    git@gitee.com:poloyy/watermarker.git (fetch)
origin    git@gitee.com:poloyy/watermarker.git (push)
test    git@gitee.com:testyy/watermarker.git (fetch)
test    git@gitee.com:testyy/watermarker.git (push)

 可以使用 test 來代替整個 URL

 

git fetch 小栗子

可以執行 git fetch pb,拉取倉庫數

$ git fetch pb
remote: Counting objects: 43, done.
remote: Compressing objects: 100% (36/36), done.
remote: Total 43 (delta 10), reused 31 (delta 5)
Unpacking objects: 100% (43/43), done.
From https://github.com/paulboone/ticgit
 * [new branch]      master     -> pb/master
 * [new branch]      ticgit     -> pb/ticgit

 

從遠端倉庫中抓取與拉取

從遠端倉庫中獲得資料,可以執行

git fetch <remote>
  • 這個命令會訪問遠端倉庫,從中拉取所有你還沒有的資料
  • 執行完成後,你將會擁有那個遠端倉庫中所有分支的引用,可以隨時合併或檢視

 

重點

git clone 命令克隆了一個倉庫,Git  會自動將其新增為遠端倉庫並預設以 “origin” 為名稱

git fetch origin
  • 這樣會抓取倉庫裡所有新 push 的內容
  • 但它只會將新內容下載到本地,並不會自動合併或修改當前內容,需要手動將新內容合併到本地內容中(git pull)

 

git pull 初步認識

  • 預設情況下,git clone 命令會自動設定本地 master 分支跟蹤 clone 下來的遠端倉庫的 master 分支(或其它名字的預設分支)
  • 執行 git pull 通常會從最初克隆的伺服器上抓取資料並自動嘗試合併到當前所在的分支

 

推送到遠端倉庫

語法格式

git push <remote> <branch>

 

將 master 分支的內容推送到 origin 伺服器

git push origin master

 

remote 預設就是 origin,而 branch 預設是 master,所以等價寫法就是

git push

 

重點

如果在你推送前,遠端倉庫已經有新推送的內容,那麼本地需要先拉取最新的內容併合並後,才能將本地的內容重新 push 到遠端倉庫

# 一般的流程
git fetch
git pull
git add .
git commit -m "update"
git push

 

檢視某個遠端倉庫

git remote show <remote>

可以檢視遠端倉庫的更多資訊

% git  remote show origin
* 遠端 origin
  獲取地址:git@gitee.com:poloyy/watermarker.git
  推送地址:git@gitee.com:poloyy/watermarker.git
  HEAD 分支:master
  遠端分支:
    master 已跟蹤
  為 'git pull' 配置的本地分支:
    master 與遠端 master 合併
  為 'git push' 配置的本地引用:
    master 推送至 master (可快進)

 

能獲取到的資訊

  • 遠端倉庫的 URL和名稱(origin)
  • 跟蹤分支的資訊
  • 正處於 master 分支
  • 執行 git pull 可以拉取遠端倉庫的 master 內容,並和本地 master 分支的內容進行合
  • 執行 git push 可以將本地 master 分支內容推送到遠端倉庫的 master 分支上

 

一個看到更多資訊的栗子

$ git remote show origin
* remote origin
  URL: https://github.com/my-org/complex-project
  Fetch URL: https://github.com/my-org/complex-project
  Push  URL: https://github.com/my-org/complex-project
  HEAD branch: master
  Remote branches:
    master                           tracked
    dev-branch                       tracked
    markdown-strip                   tracked
    issue-43                         new (next fetch will store in remotes/origin)
    issue-45                         new (next fetch will store in remotes/origin)
    refs/remotes/origin/issue-11     stale (use 'git remote prune' to remove)
  Local branches configured for 'git pull':
    dev-branch merges with remote dev-branch
    master     merges with remote master
  Local refs configured for 'git push':
    dev-branch                     pushes to dev-branch                     (up to date)
    markdown-strip                 pushes to markdown-strip                 (up to date)
    master                         pushes to master                         (up to date)

包含多個分支的資訊

 

遠端倉庫的重新命名與移除

語法格式
 git remote rename <old> <new>

 

小栗子

$ git remote rename pb paul
$ git remote
origin
paul

同時會修改你所有遠端跟蹤的分支名字,之前引用 pb/master 的現在會引用 paul/master

 

移除倉庫的兩種寫法

  • git remote remove
  • git remote rm
git remote remove paul
$ git remote
origin

重點:一旦以這種方式刪除了一個遠端倉庫,那麼所有和這個遠端倉庫相關的遠端跟蹤分支以及配置資訊也會一起被刪除

相關文章