經過前幾節的學習,大家應該對 Git 有一個初步的了解了,那么我向大家提一個問題,遠程倉庫到底是什么?
有同學就要說了,這不很簡單嗎?遠程倉庫不就是放在網絡上的一個版本庫嗎?我們本地可以向它推送數據,也可以拉取數據到本地。
對,沒錯。認識算是到位,但是概括的還不夠全面。遠程倉庫其實是一個概念,你可以理解成為網絡上的一個倉庫,但絕不僅限于此。廣義上來講,遠程倉庫指的是其他位置的倉庫,這個其他位置,甚至可以在你本地,我這樣說夠清楚嗎?只不過使用這個庫時的推送和拉取等操作與你意識中的在網絡上的遠程倉庫用法是一樣的,它們是同一套標準。換句話講,凡是使用了這套標準的都可以認為是遠程倉庫,而不僅僅局限于網絡上的其他位置。
好了,以上是對遠程倉庫的概念做了一個分析說明。接下來我們就可以步入正題,開始學習怎么去使用遠程倉庫或者遠程倉庫的一些基本操作。
1. 查看本地關聯的遠程倉庫
還記得上節課講如何初始化一個本地 git 倉庫的時候,我們用到了從遠程倉庫拉取到本地的那種方式嗎?忘記了的可以回去翻看下上一節內容,就是這個命令,還記得嗎?
$ git clone 遠程倉庫URL
當我們從遠程倉庫與本地同步后,那么本地即與遠程倉庫進行了關聯操作。我們就可以通過如下命令查看關聯的遠程倉庫:
$ git remote
或者是查看更詳細的信息:
$ git remote -v
具體操作步驟如下:
2. 添加遠程倉庫
上節課我們知道,使用 “git clone” 命令可以添加遠程倉庫到本地。另外,我們還可以手動添加遠程倉庫并且為遠程倉庫起一個簡短的別名,之后獲取數據操作時就很方便了。接下來一起看下具體怎么做呢?
a. 首先,我們可以在一個與遠程倉庫進行關聯過的目錄下使用如下命令查看關聯的倉庫情況:
git remote -v
b. 如果還要添加一個遠程倉庫地址,并為這個地址起一個簡短的別名,比如叫做 “testGitAdd”,可以使用如下命令進行操作:
git remote add testGitAdd https://github.com/javaDreame/testGitAdd.git
c. 操作完成后,重復步驟 a,查看是不是多了關聯的倉庫。
d. 成功后,就可以使用 “git fetch” 命令進行拉取數據,命令如下:
git fetch testGitAdd
整個過程的視頻流程演示如下:
3. 從遠程倉庫拉取數據
上面講述關聯添加遠程倉庫的時候已經提到了獲取數據的操作,即 “git fetch” 操作。
git fetch 支持 URL 和別名兩種方式獲取數據,比如:
$ git fetch testGitAdd
$ git fetch https://github.com/javaDreame/testGitAdd.git
這兩條命令是等價的。
需要說明的是,該命令會從該遠程項目中拉下來你本地還沒有的所有數據。完成此操作后,就具有對該遠程站點上所有分支的引用,可以隨時合并或檢查這些分支(分支的概念后續會講,先理解為就是一個遠程庫上的內容)。
注意:這個命令僅將數據下載到本地存儲庫中,僅僅是存在庫中了,它不會自動將其與你的任何工作目錄合并或修改你當前正在處理的內容。通俗地講,就是不會直接改變你目錄里的文件內容,你看不到有變化。你需要手動合并到工作目錄中。
4. 推送內容到遠程倉庫
當我們共享項目時,必須將本地修改推送到遠程。使用命令:git push ”。如果想將本地 master
分支推送到 origin
服務器那么可以運行下面的命令將已完成的所有提交推送回服務器(關于分支的概念后續會講,此處先理解成本地庫):
$ git push origin master
注意:
(1)本地執行 “push” 推送之前,必須先使用 “git add” 和 “git commit” 命令提交。關于這兩個命令,后續會系統講解。
(2)只有當從服務器克隆下來后并且此期間沒有人推送時,推送命令才有效。如果同事也克隆了一份到他們本地,并且他們修改后又推送到服務器,那么你的推送將被拒絕。必須先使用 "git pull" 命令獲取他們的修改,然后將其合并到你的工作倉庫中,最后才能進行推送。
關于這部分說明,同學們可能還會有些地方存在疑惑,很正常。因為我們有些細節還沒講到,后續慢慢就明白了。
這部分操作視頻如下:
5. 查看遠程倉庫基本信息
有時候我們需要查看遠程倉庫的更多信息,可以使用 “git remote show” 命令。同樣支持 URL 和別名:
$ git remote show origin
* remote origin
Fetch URL: https://github.com/javaDreame/testGit.git
Push URL: https://github.com/javaDreame/testGit.git
HEAD branch: master
Remote branches:
dev tracked
master tracked
Local branch configured for 'git pull':
master merges with remote master
Local ref configured for 'git push':
master pushes to master (up to date)
這部分內容展示了遠程存儲庫 origin 對應的的 URL,以及已追蹤(tracked)到的分支信息。還有,如果在 master
分支上并運行 git pull
,它將在 master
獲取所有遠程引用后自動合并到遠程的分支中(這是它與 git fetch
的區別),還列出了已拉取到的的所有遠程引用。
6. 遠程倉庫的重命名和刪除
Git 很貼心地為我們提供了重命名遠程倉庫的操作,萬一你起了個別名又嫌不合適了咋辦!接下來就看下怎么重命名:
例如,testGitAdd 這個名字又臭又長,我要將 testGitAdd 重命名為 testAdd,則可以使用 git remote rename
:
$ git remote rename testGitAdd testAdd
那么,我直接不想要了,想刪除呢?也很簡單:
$ git remote remove testAdd
說明:以這種方式刪除對遠程的引用后,與該遠程關聯的所有遠程跟蹤分支和配置設置也將被刪除。
7. 總結
這節課知識點相對比較多,可能涉及到的有些操作一時不理解,之后我們還會專門系統地提到,大家不要擔心,只需要先按我說的去理解下就可以。那么我們來回顧下本節課知識點:
- 查看遠程倉庫:git remote 或 git remote -v
- 添加遠程倉庫:git remote add 倉庫名稱 遠程倉庫地址
- 遠程倉庫拉取數據:git fetch 倉庫名稱或 URL
- 推送內容到遠程倉庫:git push origin master
- 查看遠程倉庫基本信息:git remote show origin
- 遠程倉庫重命名:git remote rename 舊名字 新名字
- 遠程倉庫刪除:git remote remove 倉庫名