Git新手教程-遠程倉庫(九)

前言

在前面的文章中,咱們一直介紹的在本地Git的倉庫相關知識點。而在實際的項目開發中,大多數狀況下,咱們每每須要和他人進行合做。所以學習如何與他人協做開發項目使咱們必需要學習與掌握的知識點。在接下的的文章中,咱們將講解什麼是遠程倉庫,以及如何運用遠程倉庫。在本文中將介紹以下命令:git

  • git remote:管理遠程倉庫。
  • git push :將修改推送到遠程倉庫上。
  • git pull :將從遠程倉庫上獲取更新,併合並。
  • git fetch :將從遠程倉庫上獲取更新

遠程倉庫

當使用 Git 來管理咱們的項目時,這對本地項目來講很是方便,可是若是須要與他人共享這些本地倉庫,咱們就須要依託其餘工具,好比 GitLabGitHub、等其餘用於託管版本控制倉庫的服務,來建立遠程倉庫。那什麼是遠程倉庫呢?github

Git 是用於管理倉庫的工具,主要在命令行上使用,Git lab or GitHub 是託管服務,咱們一般會在瀏覽器中與其進行交互。瀏覽器

什麼是遠程倉庫

咱們都知道 Git 是一個分佈式版本控制系統,那麼這就意味着,使用 Git 是不存在主倉庫的概念的,所以每一個開發者都是使用的都是倉庫的一個副本,那麼也就是說,遠程倉庫實際上是咱們本地倉庫的副本,只是它們位於其餘地方。好比位於 GitLab 或者 GitHub 上,以下所示:bash

遠程倉庫1.jpg

須要注意的是,咱們並不限於使用一個遠程倉庫,咱們能夠根據咱們本身的需求建立多個遠程倉庫。ssh

當咱們建立遠程倉庫後,咱們就能夠和他人進行協同開發了,好比你能夠將本地倉庫的更改推送到遠程倉庫,而後其餘同事能夠從遠程倉庫中拉取更改到他們的本地倉庫中。以下所示:分佈式

遠程倉庫2.jpg

添加遠程倉庫

在上文中,咱們說過遠程倉庫須要依託於其餘工具,這裏咱們將咱們的遠程倉庫放在 GitHub 上進行託管,這裏再次強調一下:ide

  • Git 是版本控制工具
  • GitHub or GitLab 是託管 Git 項目的服務。

那接下來,咱們將在GitHub上建立一個倉庫,若是你尚未帳戶,那麼快去官網整一個帳號吧~~~ 當咱們建立好帳號並登陸後,將位於以下主頁:工具

GitHub_建立倉庫.png

這裏咱們點擊右側的 + 符號,選擇 New Repostiry ,那麼接下來咱們將跳轉到建立倉庫界面:post

GitHub_建立倉庫2.png

  • Repostiry name :這裏須要填寫倉庫的名稱(通常狀況下,咱們都是使用項目名稱做爲倉庫的名稱,不用糾結一個完美的名稱,倉庫的名稱能夠隨時更改)
  • Description :這裏須要填寫倉庫的描述,該選項是選填項。
  • Public/Private :這裏須要填寫倉庫的模式 ,Public 表示公開,意味着任何人均可以查看該倉庫中的全部代碼,Private 表示私有,意味着只有倉庫擁有者,纔有權查看該倉庫中的代碼。在 GitHub 中容許咱們建立必定數量的私有倉庫。
  • Initialize this repository with the README:表示是否在建立倉庫時建立 README 文件,若是勾選,表示建立,反之不建立。

在建立完成倉庫後,咱們會獲得以下界面:學習

GitHub_建立倉庫3.png

在 GitHub 中也提供了兩種 URL 方式,第一種HTTPS 方式,第二種 SSH 方式。這裏咱們採用 HTTPS 的方式。同時 GitHub 中有三種方式來處理遠程倉庫與本地倉庫的關聯:

關於 GitHub 提供的 SSH 方式,能夠參看 GitHub-SSH

  • 第一種,在本地建立的倉庫並與遠程倉庫關聯。
  • 第二種,將已有的本地倉庫中的內容推送到如今的 GitHub 新建的遠程倉庫中。
  • 第三種,從已有的倉庫中導入代碼,使用這種模式須要咱們提供相應的URL。

在上圖 GitHub 中已經提供了關聯遠程倉庫的相關指令,你們能夠根據實際的需求來選擇不一樣的方式來關聯遠程倉庫。

本地倉庫如何與遠程倉庫關聯

在上述文章中,咱們只介紹瞭如何建立遠程倉庫,並無實際將本地倉庫與遠程倉庫進行關聯。那下面咱們將本地已有的倉庫與遠程倉庫進行關聯。

由於我已經建立了本地倉庫 GitTestProject ,那麼根據以前 GitHub 中給咱們的提示,咱們須要使用命令:

git remote add origin https://github.com/AndyJennifer/GitTestProject.git
複製代碼

使用上述命令,就能夠將本地倉庫與遠程倉庫創建鏈接了。對於該命令,咱們幾點須要注意:

  • 該命令格式爲 git remote add 遠程倉庫別名 遠程倉庫地址
  • origin 這個單詞只是指代遠程倉庫,你能夠當作它是遠程倉庫的別名,通常狀況下都是使用 origin 來指代遠程倉庫,固然你能夠將它修改成其餘名稱,好比 haha ,那麼咱們須要修改命令爲:
git remote add haha https://github.com/AndyJennifer/GitTestProject.git
複製代碼
  • 遠程倉庫的地址須要填寫完整的URL。

git remote 命令介紹

那麼接下來,咱們就去咱們的本地倉庫中關聯這個遠程倉庫吧,以下所示:

git_remote.png

注意 git remote add 命令,須要在你本地的倉庫中使用。若是你不當心關聯錯了遠程倉庫,可使用 git remote remove <name> 命令將關聯關係刪除,關於更多命令的使用,能夠查看官網中 git remote中的介紹。

眼尖的小夥伴確定看見了紅色方框中的 git remote命令,該命令能夠查看本地倉庫與遠程倉庫的關聯關係,當本地倉庫沒有與任何遠程倉庫進行關聯時,不會顯示任何遠程倉庫別名。反之,將會顯示全部關聯的遠程倉庫別名。

git remote -v 命令介紹

固然若是咱們想查看遠程倉庫中的完整路徑,咱們也可使用 git remote -v 命令,使用該命令後,咱們能獲得以下輸出:

git remote -v
origin git@github.com:AndyJennifer/GitTestProject.git (fetch)
origin git@github.com:AndyJennifer/GitTestProject.git (push)
複製代碼

上述輸出代表,當咱們在使用 origin 別名時,實際使用的路徑爲:

https://github.com/GoogleChrome/lighthouse.git
複製代碼

可能你也發現了,如今有兩個遠程倉庫,都是 "origin" 且連接到相同的 URL。惟一的區別在結尾處: (fetch) 部分和 (push) 部分,咱們將在接下來的文章中詳細說明。

將更改推送到遠程倉庫

若是咱們本地倉庫已有以下提交,咱們須要將本地倉庫中的內容推送到剛纔在 GitHub 中建立的遠程倉庫,咱們須要使用命令 git push ,使用該命令會將本地倉庫中全部的提交都推送到遠程倉庫中,以下所示:

推送到遠程倉庫.jpg

在推送到遠程倉庫以前,咱們先看看一下本地倉庫的提交:

本地倉庫commit.png

如今開始推送吧!要將本地倉庫中的 commit 推送到遠程倉庫,咱們須要使用 git push 命令,固然不是簡單的調用該命令就好了,咱們還須要提供遠程倉庫別名,以及容納所提交的 commit 的分支名。以下所示:

git push <remote name> <branch>
複製代碼

這裏咱們的遠程倉庫別名爲 origin,而且我想推送的 commit 位於 master 分支上。那麼,我要使用如下命令將個人 commit 推送到 GitHub 上的遠程倉庫:

git push origin master
複製代碼

推送到遠程倉庫2.png

有幾點須要注意:

  • 你可能須要輸入用戶名和密碼,這取決於你如何配置 GitHub 的以及使用的遠程 URL 。
  • 若是你使用的是 HTTP 版本(而不是 ssh 版本)的遠程倉庫,就須要提供用戶名和密碼。
    • 若是你配置 GitHub 使用 SSH 協議,並提供過 SSH 密匙,就不須要執行上一步。若是你對使用 SSH 鏈接 GitHub 感興趣,請參閱使用 SSH 鏈接 GitHub 文檔(GitHub-SSH)。
    • 若是你要輸入用戶名和密碼,用戶名會在輸入後顯示出來,但密碼不會顯示。只需繼續輸入密碼,完成後按 Enter 鍵便可。
  • 若是你的密碼出錯,不用擔憂,它會讓你從新輸入
  • Git 會壓縮文件使之變小,而後將其推送至遠程倉庫
  • 這裏建立了一個新分支,在頁面底部可看到[new branch],後面是 master -> master

當咱們將本地倉庫中的內容推送到 GitHub 中的遠程倉庫後,咱們查看 GitHub 中咱們以前建立的項目:

推送到遠程倉庫3.png

在 GitHub 中顯示了倉庫中有三個提交以及一個分支和一個貢獻者。

在推送到遠程倉庫以後,咱們來查看咱們的本地倉庫發生了什麼變化吧~ 使用以下命令:

git log --oneline
複製代碼

由於本地倉庫沒有其餘分支,因此我這裏直接使用 git log --oneline ,若是你的項目有其餘分支,那麼可使用 git log --oneline --graph --all

在咱們的本地倉庫中使用了以下命令後,咱們能獲得下圖:

推送到遠程倉庫4.png

在上述紅框中,origin/master 實際上是一個跟蹤分支(跟蹤分支是與遠程分支有直接關係的本地分支),該分支告訴咱們,當前本地倉庫關聯了一個遠程倉庫,該遠程倉庫的別名爲 origin,同時該遠程倉庫有一個 master 分支。而且該倉庫的 master 分支指向 commit f4d7e04 ,也就是說遠程倉庫擁有幷包含全部 f4d7e04 下的 commit 。

須要注意的一點是,這個 origin/master 跟蹤分支並不能實時表現被跟蹤分支在遠程倉庫上的位置。若是咱們以外的其餘人對遠程倉庫作了更改,咱們本地倉庫中的 origin/master 跟蹤分支不會移動。咱們必須告訴它檢查更新,它纔會移動。

從遠程倉庫中拉取修改

咱們已經學會了如何將本地倉庫中的 commit 推送到遠程倉庫,如今咱們試想另外一種狀況,遠程倉庫中存在一些 commit ,可是咱們的本地倉庫中沒有這些 commit ,這種狀況出現的緣由有多個,好比咱們是團隊協做開發一個項目,有一名同事將更新推送到了遠程倉庫,或者你在不一樣的電腦上開展同一個項目,好比你在公司的電腦上向遠程倉庫推送了更新,可是你的我的電腦中的本地倉庫沒有這些更新。

git pull

如何將遠程倉庫中的更新拉取到本地倉庫呢?咱們看下面的這個例子:

從遠程倉庫中拉取修改1.jpg

在咱們的本地倉庫中有五個提交,可是遠程倉庫中有六個提交,本地的 master 指向提交 H ,而遠程倉庫中的 master 指向 H 以後的提交 J, 因爲兩個倉庫處於不一樣步的狀態,咱們須要將遠程倉庫中的更改同步到本地倉庫中。這個時候咱們可使用 git pull + 遠程倉庫別名 + 拉取分支,在本示例中咱們可使用以下命令:

git pull origin master
複製代碼

從遠程倉庫中拉取修改2.jpg

使用該命令後,會將遠程倉庫中的更改拉取到本地倉庫,並與本地倉庫進行合併(merge),並更新。

實際操做例子

咱們已經知道 git pull 命令的使用方式,如今結合咱們以前的項目咱們來實戰一下,找到咱們以前在 GitHub 中建立的項目,點擊 Add a README,咱們建立一個 README.md 文件,以下所示:

從遠程倉庫拉取修改3.png

選擇會跳轉到一個新的編輯界面,這裏咱們不對該文件進行編輯,咱們直接填寫以下界面:

從遠程倉庫拉取修改4.png

在上圖中,咱們能夠選擇填寫相關信息。這裏我就不填寫了,直接點擊Commit new file。當點擊後,咱們再查看項目,咱們會發現多了一個 README.md文件與一個 commit 以下所示:

從遠程倉庫拉取修改5.png

由於咱們以前本地倉庫中只有 3 個提交,這個時候與遠程倉庫不一樣步,那麼如今咱們可使用命令:

git pull origin master
複製代碼

使用該命令後,咱們能獲得下圖:

從遠程倉庫拉取修改6.png

經過上述操做,就能將遠程倉庫中的內容拉取到本地倉庫了。可是咱們須要注意,使用 git pull 命令會自動將本地分支與跟蹤分支進行合併(merge),若是你不須要,可使用另外一個命令 git fetch

git fetch

git fetch 主要用於從遠程倉庫中拉取 commit , 可是不會在拉取到 commit 後自動的將本地分支與遠程的分支進行合併(merge)。什麼意思呢?先不急,咱們先看 git fetch 命令的使用方式, git fetchgit pull 使用方式基本相同,也是 遠程倉庫別名 + 拉取分支,以下所示:

git fetch origin master
複製代碼

瞭解了該命令的使用方式後,咱們來看看使用 git fetchgit pull 命令的區別:

在下圖中,咱們本地倉庫只有 D、E、F、G、H 五個提交,而遠程倉庫擁有本地倉庫中沒有的提交 J

從遠程倉庫中拉取修改7.jpg

根據上圖,你們應該會發現幾點

  • git fetchgit pull 命令都會將遠程分支上的 commit 拉取到本地倉庫。
  • git fetchgit pull 命令都會將本地跟蹤分支(上圖中 origin/master)將會移動到最新的 commit 。
  • git fetch 不會將本地分支(上圖中 master)指向拉取的最新 commit(上圖中 J commit) 。

也就是說使用 git fetch 命令並無使本地分支進行移動,若是咱們但願本地 master 具備 origin/master 分支上的 commit。則咱們須要合併(merge),假如咱們已經在本地倉庫的 master分支上,咱們須要使用命令,

git merge origin/master
複製代碼

簡單的來說,git fetch 至關於 git pull 的一半的操做,剩下的一半是合併(merge)。

git fetch 主要使用場景

git fetch 的主要使用場景是當你的遠程倉庫與本地倉庫都有對方沒有的 commit 時。請看以下場景:

從遠程倉庫中拉取修改8.jpg

在上圖中,本地倉庫與遠程倉庫在 H 提交以前狀態一直是同步的,可是後續的過程當中,本地倉庫增長了一個提交 8,遠程倉庫也增長了一個提交 J ,若是這個時候,你想從遠程倉庫中拉取更改到本地,你可能會想使用命令 git pull origin master ,可是你會發現並無任何做用,在如上狀況下,咱們須要使用 git fetch origin master ,使用該命令後,會使跟蹤分支(origin/master) 指向最新的 commit ,以下所示:

從遠程倉庫中拉取修改9.jpg

若是咱們想將跟蹤分支(origin/master) 的 commit 應用到本地 master 分支上 ,咱們須要在 master 分支上使用命令 git merge origin/master , 那接下來咱們能獲得下圖:

從遠程倉庫中拉取修改10.jpg

由於合併(merge)後會產生一個合併提交 4,又由於遠程倉庫中中並無本地倉庫中的 8,因此若是咱們須要遠程倉庫也擁有這些提交,那麼咱們可使用命令 git push origin master,使用該命令後,咱們能獲得下圖:

從遠程倉庫中拉取修改11.jpg

在上圖中,使用 git push origin master命令後,遠程倉庫會拉取本地倉庫的更改,同時會將本地的 跟蹤分支(origin/master)指向本地最新的提交 4

IntelliJ IDEA or Android Sutdio 圖形化界面的使用

在上述文章中,咱們講解了相關指令,如今咱們來看看相關指令在 IDEA 中的使用。

建立 GitHub 遠程倉庫

建立遠程倉庫有多種方式,這裏咱們仍是以在 GitHub 中建立遠程倉庫爲例, 要想在 IDEA 中建立 GitHub 中的遠程倉庫,咱們須要在配置界面(在 Mac 中爲 Preferences,Windows 爲 Settings )中找到 Version Control -> GitHub選項 ,而後添加本身的 GitHub帳號,以下所示:

idea_1.png

在添加完畢帳號後,找到工具欄中的 VCS -> Import into Version Control -> Share project on Github。 以下所示:

idea_2.png

選擇後會讓咱們填寫,遠程倉庫的名稱,及遠程倉庫的別名,及對遠程倉庫的描述信息等,以下圖所示:

idea_3.png

填寫相關信息後,咱們就能夠點擊 Share 按鈕 建立遠程倉庫啦。

pull push fetch

當咱們建立遠程倉庫後,咱們能夠經過點擊鼠標右鍵,依次選擇 Git -> Repositiry,而後選擇使用 git pullgit push 仍是 git fetch 。 以下所示:

idea_4.png

上圖中紅色方框所包括的藍色左下箭頭git pull,也就是從遠程倉庫拉取更新。

固然若是你要使用 git push 命令,也能夠直接使用快捷鍵 Alt+ ` (Windows)option + ` (Mac) 的方式。以下所示:

idea_5.png
相關文章
相關標籤/搜索