1. 程式人生 > >Git使用教程(四)--遠端倉庫

Git使用教程(四)--遠端倉庫

在多人協同開發中,一般來說不同的人員有不同的許可權,有的人員只有可讀許可權, 有的具有讀寫許可權,此時只有只讀許可權的人員應該怎麼貢獻程式碼呢? 亦或是專案有多個協作的遠端地址,又應該如何管理這些遠端倉庫來進行協作呢?

Git作為一個分散式的版本管理系統,相對於集中式的版本控制,如SVN等,在此時就體現出了強大的趨勢——Git的多遠端倉庫。遠端倉庫說簡單點就是網路上的專案倉庫,可能會有多個。下面就一起來看看怎麼使用遠端倉庫以及如何解決前面我們丟擲的問題:

1、檢視遠端倉庫

當我們克隆一個遠端的倉庫(這裡使用的倉庫地址是:演示倉庫地址)到本地後,當前的專案就已經生成了一個名為origin遠端倉庫,地址則是指向我們克隆的地址。(什麼?還不知道怎麼克隆專案?

戳我瞭解)我們可以使用git remote進行檢視:

$ git remote
origin

說明我們已經有一個名字為origin的遠端倉庫了。如果想檢視倉庫的地址,使用git remote -v 進行檢視:

$ git remote -v
origin  https://github.com/gavincook/test.git (fetch)
origin  https://github.com/gavincook/test.git (push)

如果有多個遠端倉庫,這裡會將所有的遠端倉庫羅列出來,比如我們新增一個名字為myFork遠端倉庫(具體新增過程後面講述):

$ git remote -v
myFork  https://github.com
/AntStudio/test.git (fetch) myFork https://github.com/AntStudio/test.git (push) origin https://github.com/gavincook/test.git (fetch) origin https://github.com/gavincook/test.git (push)

可以看到這裡吧origin和myFork都羅列出來了。

2、新增遠端倉庫

我們這裡設想一個場景,在多人協作開發中,原始倉庫(origin)控制了許可權,我們只有只讀許可權(也即只能拉取不能推送),這個時候我們應該怎麼樣不改變原始倉庫的許可權分配參與協作呢?這時候一般我們會將專案fork到自己的使用者空間下,點選專案主頁右上角的fork按鈕即可。
fork專案


比如我這裡fork到了AntStudio賬戶空間下,在AntStudio下面就會存在一個test的專案,如圖:
fork專案
我們對於自己的使用者空間的專案具有讀寫許可權,因此我們可以將程式碼推送到我們的fork上,通過建立pull request的方式,讓專案管理員進行合併。專案fork後,我們需要將fork後的倉庫地址新增到本地專案中,以便我們可以推送程式碼。
我們可以使用git remote add [remoteName] [url]來新增遠端倉庫,其中remoteName為遠端倉庫的名字,url為遠端倉庫的地址:

$ git remote add myFork https://github.com/AntStudio/test.git

這樣我們就完成了遠端倉庫的新增,使用git remote -v檢視就能看到名字為myFork的遠端倉庫,如第一點最後所見。

3、檢視遠端倉庫的詳細資訊

第一點中,我們使用git remote -v查看了當前都有哪些遠端倉庫。對於具體某一個遠端倉庫,我們可以使用git remote show [remoteName]來檢視倉庫的具體資訊:

$ git remote show myFork
* remote myFork
  Fetch URL: https://github.com/AntStudio/test.git
  Push  URL: https://github.com/AntStudio/test.git
  HEAD branch: master
  Remote branch:
    master new (next fetch will store in remotes/myFork)
  Local ref configured for 'git push':
    master pushes to master (fast-forwardable)

這裡我們可以看到有遠端倉庫的拉取和推送的地址,Remote branch會羅列遠端倉庫的分支哪些沒有同步到本地(這裡可以看到master沒有被同步到本地),哪些分支已經同步,哪些分支遠端已經刪除本地還存在的。最後一個關於git push的,fast-forwardable這一行表示的是,我們使用git push時,預設是處理哪個分支。

4、從遠端倉庫拉取

git fetch [remoteName]允許從遠端倉庫中拉取所有該倉庫的更新,remoteName為遠端倉庫的名字,如果忽略不寫則表示origin,也即clone時候的倉庫。此外還可以使用git remote update [remoteName]來拉取更遠端倉庫的所有更新,如果不指定remoteName則表示拉取所有的遠端倉庫的更新。注意,git fetchgit remote update只會拉取伺服器的更新,不會自動合併到本地分支。如果需要讓本地的分支跟蹤,可以使用git pull [remoteName] branchName

5、推送到遠端倉庫

我們使用git push推送程式碼到遠端倉庫,具體語法為:git push [remoteName] localBranchName:remoteBranchName 其中localBranchName代表本地分支,remoteBranchName代表遠端分支,遠端分支可以省略,當不指定遠端分支時,遠端分支名字和本地分支名字一致。也即git push [remoteName] localBranchName等同於git push [remoteName] localBranchName:localBranchName

6、刪除遠端倉庫分支&&同步分支

第五點簡單表述了程式碼推送,而git push還可以實現刪除遠端分支。當我們省略localBranchName時,則可以 推送一個空的分支到遠端分支上,來達到刪除遠端分支。比如刪除一個叫test的分支,可以使用git push myFork :test
當別人刪除了遠端分支時,我們需要將本地對改分支更新分支(git remote show [remoteName]檢視),也即remoteName/branchName分支刪除以和倉庫同步。可以使用git remote prune remoteName,remoteName遠端倉庫名字,可以有多個,相互直接用空格相隔。

7、重新命名或刪除遠端倉庫

突然有一天,發現之前的倉庫名名字取得太難聽了,想換下,咋辦?難道要刪掉專案重新來過嗎?當然不用,使用
git remote rename oldRemoteName newRemoteName,這樣就可以快速給倉庫換個更酷炫的名字。如果想修改下一個倉庫的地址,則可以使用:
git remote set-url remoteName newUrl,這樣就把倉庫的地址修改為了${newUrl}了。
那要是不想要這個遠端倉庫了呢,
git remote remove remoteName,試試這個命令,然後再用git remote -v看看,是不是這個倉庫消失了呢。

小結:本文通過實際的操作,描述了遠端倉庫的常用操作。希望能幫助大家更好的使用Git來服務我們的協作。