在前面的文章中,咱們一直介紹的在本地Git的倉庫相關知識點。而在實際的項目開發中,大多數狀況下,咱們每每須要和他人進行合做。所以學習如何與他人協做開發項目使咱們必需要學習與掌握的知識點。在接下的的文章中,咱們將講解什麼是遠程倉庫,以及如何運用遠程倉庫。在本文中將介紹以下命令:git
當使用 Git 來管理咱們的項目時,這對本地項目來講很是方便,可是若是須要與他人共享這些本地倉庫,咱們就須要依託其餘工具,好比 GitLab
、GitHub
、等其餘用於託管版本控制倉庫的服務,來建立遠程倉庫。那什麼是遠程倉庫呢?github
Git 是用於管理倉庫的工具,主要在命令行上使用,
Git lab
orGitHub
是託管服務,咱們一般會在瀏覽器中與其進行交互。瀏覽器
咱們都知道 Git 是一個分佈式版本控制系統,那麼這就意味着,使用 Git 是不存在主倉庫的概念的,所以每一個開發者都是使用的都是倉庫的一個副本,那麼也就是說,遠程倉庫實際上是咱們本地倉庫的副本
,只是它們位於其餘地方。好比位於 GitLab
或者 GitHub
上,以下所示:bash
須要注意的是,咱們並不限於使用一個遠程倉庫,咱們能夠根據咱們本身的需求建立多個遠程倉庫。ssh
當咱們建立遠程倉庫後,咱們就能夠和他人進行協同開發了,好比你能夠將本地倉庫的更改推送到遠程倉庫,而後其餘同事能夠從遠程倉庫中拉取更改到他們的本地倉庫中。以下所示:分佈式
在上文中,咱們說過遠程倉庫須要依託於其餘工具,這裏咱們將咱們的遠程倉庫放在 GitHub 上進行託管,這裏再次強調一下:ide
那接下來,咱們將在GitHub上建立一個倉庫,若是你尚未帳戶,那麼快去官網整一個帳號吧~~~ 當咱們建立好帳號並登陸後,將位於以下主頁:工具
這裏咱們點擊右側的 +
符號,選擇 New Repostiry
,那麼接下來咱們將跳轉到建立倉庫界面:post
Repostiry name
:這裏須要填寫倉庫的名稱(通常狀況下,咱們都是使用項目名稱做爲倉庫的名稱,不用糾結一個完美的名稱,倉庫的名稱能夠隨時更改)Description
:這裏須要填寫倉庫的描述,該選項是選填項。Public/Private
:這裏須要填寫倉庫的模式 ,Public
表示公開,意味着任何人均可以查看該倉庫中的全部代碼,Private
表示私有,意味着只有倉庫擁有者,纔有權查看該倉庫中的代碼。在 GitHub 中容許咱們建立必定數量的私有倉庫。Initialize this repository with the README
:表示是否在建立倉庫時建立 README 文件,若是勾選,表示建立,反之不建立。在建立完成倉庫後,咱們會獲得以下界面:學習
在 GitHub 中也提供了兩種 URL 方式,第一種HTTPS
方式,第二種 SSH
方式。這裏咱們採用 HTTPS 的方式。同時 GitHub 中有三種方式來處理遠程倉庫與本地倉庫的關聯:
關於 GitHub 提供的 SSH 方式,能夠參看 GitHub-SSH
新
的倉庫並與遠程倉庫關聯。已有
的本地倉庫中的內容推送到如今的 GitHub 新建的遠程倉庫中。在上圖 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
複製代碼
那麼接下來,咱們就去咱們的本地倉庫中關聯這個遠程倉庫吧,以下所示:
注意
git remote add
命令,須要在你本地的倉庫中使用。若是你不當心關聯錯了遠程倉庫,可使用git remote remove <name>
命令將關聯關係刪除,關於更多命令的使用,能夠查看官網中 git remote中的介紹。
眼尖的小夥伴確定看見了紅色
方框中的 git remote
命令,該命令能夠查看本地倉庫與遠程倉庫的關聯關係,當本地倉庫沒有與任何遠程倉庫進行關聯時,不會顯示任何遠程倉庫別名。反之,將會顯示全部關聯的遠程倉庫別名。
固然若是咱們想查看遠程倉庫中的完整路徑,咱們也可使用 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
,使用該命令會將本地倉庫中全部的提交都推送到遠程倉庫中,以下所示:
在推送到遠程倉庫以前,咱們先看看一下本地倉庫的提交:
如今開始推送吧!要將本地倉庫中的 commit 推送到遠程倉庫,咱們須要使用 git push
命令,固然不是簡單的調用該命令就好了,咱們還須要提供遠程倉庫別名
,以及容納所提交的 commit 的分支名
。以下所示:
git push <remote name> <branch>
複製代碼
這裏咱們的遠程倉庫別名爲 origin
,而且我想推送的 commit 位於 master
分支上。那麼,我要使用如下命令將個人 commit 推送到 GitHub 上的遠程倉庫:
git push origin master
複製代碼
有幾點須要注意:
當咱們將本地倉庫中的內容推送到 GitHub 中的遠程倉庫後,咱們查看 GitHub 中咱們以前建立的項目:
在 GitHub 中顯示了倉庫中有三個提交以及一個分支和一個貢獻者。
在推送到遠程倉庫以後,咱們來查看咱們的本地倉庫發生了什麼變化吧~ 使用以下命令:
git log --oneline
複製代碼
由於本地倉庫沒有其餘分支,因此我這裏直接使用
git log --oneline
,若是你的項目有其餘分支,那麼可使用git log --oneline --graph --all
。
在咱們的本地倉庫中使用了以下命令後,咱們能獲得下圖:
在上述紅框中,origin/master
實際上是一個跟蹤分支(跟蹤分支是與遠程分支有直接關係的本地分支),該分支告訴咱們,當前本地倉庫關聯了一個遠程倉庫,該遠程倉庫的別名爲 origin
,同時該遠程倉庫有一個 master
分支。而且該倉庫的 master
分支指向 commit f4d7e04
,也就是說遠程倉庫擁有幷包含全部 f4d7e04
下的 commit 。
須要注意的一點是,這個
origin/master
跟蹤分支並不能實時表現被跟蹤分支在遠程倉庫上的位置。若是咱們以外的其餘人對遠程倉庫作了更改,咱們本地倉庫中的origin/master
跟蹤分支不會移動。咱們必須告訴它檢查更新,它纔會移動。
咱們已經學會了如何將本地倉庫中的 commit 推送到遠程倉庫,如今咱們試想另外一種狀況,遠程倉庫中存在一些 commit ,可是咱們的本地倉庫中沒有這些 commit ,這種狀況出現的緣由有多個,好比咱們是團隊協做開發一個項目,有一名同事將更新推送到了遠程倉庫,或者你在不一樣的電腦上開展同一個項目,好比你在公司的電腦上向遠程倉庫推送了更新,可是你的我的電腦中的本地倉庫沒有這些更新。
如何將遠程倉庫中的更新拉取到本地倉庫呢?咱們看下面的這個例子:
在咱們的本地倉庫中有五個提交,可是遠程倉庫中有六個提交,本地的 master
指向提交 H
,而遠程倉庫中的 master
指向 H
以後的提交 J
, 因爲兩個倉庫處於不一樣步的狀態,咱們須要將遠程倉庫中的更改同步到本地倉庫中。這個時候咱們可使用 git pull + 遠程倉庫別名 + 拉取分支
,在本示例中咱們可使用以下命令:
git pull origin master
複製代碼
使用該命令後,會將遠程倉庫中的更改拉取到本地倉庫,並與本地倉庫進行合併(merge)
,並更新。
咱們已經知道 git pull
命令的使用方式,如今結合咱們以前的項目咱們來實戰一下,找到咱們以前在 GitHub 中建立的項目,點擊 Add a README
,咱們建立一個 README.md
文件,以下所示:
選擇會跳轉到一個新的編輯界面,這裏咱們不對該文件進行編輯,咱們直接填寫以下界面:
在上圖中,咱們能夠選擇填寫相關信息。這裏我就不填寫了,直接點擊Commit new file
。當點擊後,咱們再查看項目,咱們會發現多了一個 README.md
文件與一個 commit
以下所示:
由於咱們以前本地倉庫中只有 3
個提交,這個時候與遠程倉庫不一樣步,那麼如今咱們可使用命令:
git pull origin master
複製代碼
使用該命令後,咱們能獲得下圖:
經過上述操做,就能將遠程倉庫中的內容拉取到本地倉庫了。可是咱們須要注意,使用 git pull
命令會自動
將本地分支與跟蹤分支進行合併(merge)
,若是你不須要,可使用另外一個命令 git fetch
。
git fetch
主要用於從遠程倉庫中拉取 commit , 可是不會
在拉取到 commit 後自動的將本地分支與遠程的分支進行合併(merge)。什麼意思呢?先不急,咱們先看 git fetch
命令的使用方式, git fetch
與 git pull
使用方式基本相同,也是 遠程倉庫別名 + 拉取分支
,以下所示:
git fetch origin master
複製代碼
瞭解了該命令的使用方式後,咱們來看看使用 git fetch
與 git pull
命令的區別:
在下圖中,咱們本地倉庫只有
D、E、F、G、H
五個提交,而遠程倉庫擁有本地倉庫中沒有的提交J
。
根據上圖,你們應該會發現幾點
git fetch
與 git pull
命令都會將遠程分支上的 commit 拉取到本地倉庫。git fetch
與 git 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
的主要使用場景是當你的遠程倉庫與本地倉庫都有對方沒有的 commit 時。請看以下場景:
在上圖中,本地倉庫與遠程倉庫在 H
提交以前狀態一直是同步的,可是後續的過程當中,本地倉庫增長了一個提交 8
,遠程倉庫也增長了一個提交 J
,若是這個時候,你想從遠程倉庫中拉取更改到本地,你可能會想使用命令 git pull origin master
,可是你會發現並無任何做用,在如上狀況下,咱們須要使用 git fetch origin master
,使用該命令後,會使跟蹤分支(origin/master) 指向最新的 commit ,以下所示:
若是咱們想將跟蹤分支(origin/master) 的 commit 應用到本地 master
分支上 ,咱們須要在 master
分支上使用命令 git merge origin/master
, 那接下來咱們能獲得下圖:
由於合併(merge)後會產生一個合併提交 4
,又由於遠程倉庫中中並無本地倉庫中的 8
,因此若是咱們須要遠程倉庫也擁有這些提交,那麼咱們可使用命令 git push origin master
,使用該命令後,咱們能獲得下圖:
在上圖中,使用 git push origin master
命令後,遠程倉庫會拉取本地倉庫的更改,同時會將本地的 跟蹤分支(origin/master)
指向本地最新的提交 4
。
在上述文章中,咱們講解了相關指令,如今咱們來看看相關指令在 IDEA 中的使用。
建立遠程倉庫有多種方式,這裏咱們仍是以在 GitHub 中建立遠程倉庫爲例, 要想在 IDEA 中建立 GitHub 中的遠程倉庫,咱們須要在配置界面(在 Mac 中爲 Preferences,Windows 爲 Settings )中找到 Version Control
-> GitHub
選項 ,而後添加本身的 GitHub帳號,以下所示:
在添加完畢帳號後,找到工具欄中的 VCS
-> Import into Version Control
-> Share project on Github
。 以下所示:
選擇後會讓咱們填寫,遠程倉庫的名稱,及遠程倉庫的別名,及對遠程倉庫的描述信息等,以下圖所示:
填寫相關信息後,咱們就能夠點擊 Share
按鈕 建立遠程倉庫啦。
當咱們建立遠程倉庫後,咱們能夠經過點擊鼠標右鍵
,依次選擇 Git
-> Repositiry
,而後選擇使用 git pull
、git push
仍是 git fetch
。 以下所示:
上圖中紅色方框所包括的
藍色左下箭頭
爲git pull
,也就是從遠程倉庫拉取更新。
固然若是你要使用 git push
命令,也能夠直接使用快捷鍵 Alt+ ` (Windows)
或 option + ` (Mac)
的方式。以下所示: