Git 使用遠端倉庫
遠端倉庫
什麼是遠端倉庫
Git 是一個分散式版本控制系統
,這意味著不存在一個主資訊倉庫
。每位開發者使用的都是倉庫的一個副本。因此,你可以擁有倉庫的一個副本(它包含釋出的 commit 和版本歷史記錄),並且你的朋友也可以擁有相同倉庫的一個副本。每個倉庫包含的資訊與其他副本完全相同,沒有哪一個是主要的。
在此之前,你可能一直使用的都只是本地倉庫。而遠端倉庫與你的本地 Git 倉庫一樣,只是它位於其他地方(github 或其他電腦上)。
訪問遠端倉庫的方式
訪問遠端倉庫的方式有多個:
- 使用
URL
- 使用系統檔案的路徑
雖然你也可以在自己的檔案系統上建立遠端倉庫,但這種做法極少見。到目前為止,訪問遠端倉庫的最常見方式是通過位於 Web 上的倉庫的 URL
。
我們與遠端倉庫互動和控制遠端倉庫
的方式,是使用 Git 遠端命令:
$ git remote
- 可以連線到多個不同的遠端倉庫。
- 簡寫名是用於指代遠端倉庫位置的名稱。通常該位置為 URL,但也可能是同一臺計算機上的檔案路徑。
git remote add
用於新增到新的遠端倉庫的連線。git remote -v
用於檢視遠端倉庫與連線之間的詳細資訊。
為何需要多個遠端倉庫
簡單來說,如果你跟多個開發者合作,那麼你就需要在他們合併到 master
分支之前,在專案中獲取他們在各自的分支上所做的更改。如果你想在決定實施自己的更改前,測試一下他們的更改,則需要這麼做。
新增遠端倉庫
git remote
命令可以讓你管理遠端倉庫和與之互動。
git remote
的輸出只是一個單詞 origin
。”origin” 一詞稱為”簡寫名”。簡寫名只是遠端倉庫所在位置的簡略表示。簡寫名僅區域性用於當前倉庫(如在你的本地倉庫中)。”origin” 一詞是指代主遠端倉庫的專用名稱。你也可以將它重新命名為別的東西,但通常會被命名為 “origin”。
我們為何關心引用遠端倉庫路徑的簡便性
?這是因為,你很快會發現我們將在很多命令中,用到遠端倉庫的路徑。而這時,只使用一個名稱就比使用遠端倉庫的完整路徑簡單多了。
如果你想檢視遠端倉庫的完整路徑,只需使用 -v
選項即可。
在 GitHub 上託管
GitHub 與 Git 非常相似,有時候人們會將 Git 和 GitHub 混淆,認為它們是完全一樣的,而事實上它們大相徑庭。
- Git 是一個
版本控制工具
(命令列) - GitHub 是一個
託管 Git 專案的服務
git remote add origin https://github.com/huabinzhang427/my-travel-plans.git
首先自己在 GitHub 上建立倉庫,然後通過上面的命令,在我的本地倉庫與 GitHub 帳戶上剛建立的遠端倉庫之間建立連線
。
通過 git clone
克隆的倉庫,無法更改在 GitHub 上的專案
,因為它不是該遠端倉庫的所有者。
git remote add
用於建立一個 origin
簡寫名,新增了一個遠端倉庫的連結,指向 GitHub 上的專案。
git remote -v
會顯示簡寫名和 URL。
將更改推送到遠端倉庫
我的遠端倉庫的簡寫名為 origin
,並且我想推送的 commit 位於 master
分支上。那麼,我要使用以下命令將我的 commit 推送到 GitHub 上的遠端倉庫:
$ git push origin master
git push
命令需要:
- 你想向其推送 commit 的
遠端倉庫的簡寫名
- 包含你想推送的 commit 的
分支名
有幾點需要注意:
- 你可能需要輸入使用者名稱和密碼,這取決於你如何配置 GitHub 的以及使用的遠端 URL 。如果你使用的是 HTTP 版本(而不是 ssh 版本)的遠端倉庫,就需要提供使用者名稱和密碼。如果你配置 GitHub 使用 SSH 協議,並提供過 SSH 密匙,就不需要執行上一步。如果你對使用 SSH 連線 GitHub 感興趣,請參閱使用 SSH 連線 GitHub 文件。
- 如果你要輸入使用者名稱和密碼,使用者名稱會在輸入後顯示出來,但密碼不會顯示。只需繼續輸入密碼,完成後按 Enter 鍵即可。
- Git 會壓縮檔案使之變小,然後將其推送至遠端倉庫。
- 這裡建立了一個新分支,在頁面底部可看到
[new branch]
,後面是master -> master
。
現在我們輸出中有一個標記 (marker)!該標記為 origin/master
,並被稱為跟蹤分支
。跟蹤分支的名稱包含遠端倉庫的簡寫名及分支名稱
。所以跟蹤分支 origin/master
告訴我們遠端倉庫 origin
有一個 master
分支,指向 commit 5590046
(幷包含 5590046
前的所有 commit )。這非常有用,因為這意味著我們可以在本地倉庫跟蹤遠端倉庫的資訊!
需要注意的一點是,這個 origin/master
跟蹤分支並不能實時表現被跟蹤分支在遠端倉庫上的位置
。如果我們之外的其他人對遠端倉庫做了更改,我們本地倉庫中的 origin/master
跟蹤分支不會移動。我們必須告訴它檢查更新
,它才會移動。
從遠端倉庫拉取修改
做出這樣操作的情況是本地倉庫與遠端倉庫的狀態不一致
,我們需要同步遠端倉庫的狀態到本地倉庫。
本地倉庫中出現的分支實際上在跟蹤遠端倉庫中的一個分支
(例如,本地倉庫中的 origin/master
稱為跟蹤分支,因為它在跟蹤遠端倉庫上簡寫名為 “origin” 的 master
分支)。
新增遠端更改
使用 git pull
拉取更改
git push
會同步遠端倉庫與本地倉庫。要執行相反操作(將本地倉庫與遠端倉庫同步),我們需要使用 git pull
。git pull
的格式與 git push
的非常相似 - 提供遠端倉庫的簡寫名,以及你要拉取 commit 的分支名稱。
$ git pull origin master
在執行 git pull
時,會發生以下活動:
- 遠端分支上的 commit 會被複制到本地倉庫。
- 本地跟蹤分支(
origin/master
)移到指向最新的 commit。 - 本地跟蹤分支(
origin/master
)合併到本地分支(master)。
執行 git pull origin master
會檢索 origin
遠端倉庫 master
分支中的 commit。
執行此程式碼時需要注意幾點:
- 格式與
git push
非常相似 - 要對專案計數、壓縮和打包。 - 它有一個短語 “fast-forward”,這意味著 Git 進行了快進合併。
- 它顯示類似於
git log --stat
的資訊,其中顯示更改的檔案以及新增或刪除了多少行。
如果你不想自動將本地分支與跟蹤分支合併,則不應使用 git pull
,而是使用另一個命令 git fetch
。當遠端倉庫包含你沒有的 commit ,但本地倉庫也包含遠端倉庫所沒有的 commit 時。
注意,可以在 GitHub 上手動新增更改(但不建議這樣做
,所以別這樣做)。
Pull 和 Fetch
git fetch
用於從遠端倉庫分支檢索 commit ,但不會在收到這些 commit 之後,自動將本地分支與遠端跟蹤分支合併。
$ git fetch origin master
執行 git fetch
後,會發生以下活動:
- 遠端分支上的 commit 會複製到本地倉庫
本地跟蹤分支
(例如,origin/master)移到指向最新的 commit
需要注意的一點是,本地分支完全不會被改變
。你可以將 git fetch
想象成 git pull
它的一半操作,而 git pull
的另一半是合併。
現在的狀況是遠端倉庫上具有本地倉庫沒有的 commit。
執行 git fetch origin master
,系統將獲取 origin
的 master
分支上的所有 commit。並移動至 origin/master
跟蹤分支,使其指向這些 commit。
就這樣,並沒有讓本地 master
分支移動。如果我們希望本地 master
分支具有 origin/master
中的 commit,則需要進行手動合併(merge
)。如果我們位於 master
分之上,則需要執行 git merge origin/master
以更新本地 master
分支。
使用 git fetch
而不是 git pull
的一個主要情形是當你的遠端分支和本地分支都擁有對方所沒有的更改時
。在這種情況下,你要獲取遠端更改,將它們儲存到本地分支中,然後手動執行合併。最後,你可以將新的合併 commit 推送會遠端倉庫。
本地倉庫落後於遠端倉庫。
現在假設我們沒有注意到這一點,然後在本地倉庫做了一次提交。現在我們兩個倉庫,前幾個提交相同,但現在他們的 master
分支指向不同提交。如果我們試著執行 git pull
命令並不起作用。
但是我們可以使用 git fetch
在不合並的情況下獲取遠端倉庫的提交。所以如果我們執行 git fetch origin master
命令就會獲取遠端倉庫的提交,並且將 origin/master
指向它們。
由於我們在 master
分支上,我們可以執行 git merge origin/master
命令,把遠端做的修改更新到我們的 master
分支上。
現在本地倉庫擁有一些遠端倉庫沒有的提交,所以我們需要推送這些提交。在 origin/master
分支上執行 git push
命令將會推送更新後的本地 commit 提交到遠端倉庫。
相關文章
- git 遠端倉庫Git
- git倉庫修改遠端倉庫Git
- git-遠端倉庫Git
- git本地倉庫關聯遠端倉庫Git
- git push到遠端倉庫Git
- Git使用小技巧之多個遠端倉庫Git
- Git 系列教程(8)- 遠端倉庫的使用Git
- Git Step by Step (6):Git遠端倉庫Git
- git 修改本地倉庫的遠端倉庫地址Git
- git 本地push到遠端倉庫Git
- GIT切換遠端地址倉庫Git
- 如何修改 Git 遠端倉庫 URLGit
- Git Step by Step (7):Git遠端倉庫(續)Git
- 本地倉庫推送到遠端倉庫的git操作Git
- 使用git建立遠端倉庫,讓別人git clone下來Git
- 使用GitBash從Git遠端倉庫下載程式碼Git
- git 入門教程之遠端倉庫Git
- git克隆遠端倉庫的指定分支Git
- 修改git遠端倉庫分支名稱Git
- Git remote 遠端倉庫連結管理GitREM
- git連線多個遠端倉庫Git
- git連線遠端倉庫的方式Git
- IDEA更改遠端git倉庫地址IdeaGit
- 【Git】fork遠端倉庫,fork倉庫同步和提交pull requestGit
- git 從遠端倉庫獲取所有分支Git
- 教你玩轉Git-提取遠端倉庫Git
- git push 到遠端倉庫提示Permission deniedGit
- git 上傳程式碼到遠端倉庫Git
- 【git學習三】git基礎之git管理遠端倉庫Git
- 使用git初始化本地倉庫並提交到遠端分支Git
- 教你玩轉Git-刪除遠端倉庫Git
- 【第十篇】- Git 遠端倉庫(Github)Github
- 在CentOS上搭建git倉庫伺服器以及mac端進行克隆和提交到遠端git倉庫CentOSGit伺服器Mac
- git 自動上傳程式碼到遠端倉庫Git
- 配置多個 Git 賬號來管理遠端倉庫Git
- 從零開始學習Git--遠端倉庫Git
- 將本地專案推送到遠端git新倉庫Git
- Git同步兩個遠端倉庫的分支程式碼Git