Git連接遠程倉庫
- 一、什么是Git遠程倉庫?
- 二、創建遠程倉庫
- 第一步:新建倉庫
- 第二步:創建SSH公鑰
- 第三步:查看公鑰
- 第四步:登錄碼云Gitee,打開當前倉庫設定,添加SSH公鑰
- 第五步:從本地Git倉庫連接遠程Git倉庫,并做推送
- 第五步:解除本地Git倉庫與遠程Git倉庫的關聯,非“洗掉”
- 第六步:從遠程倉庫拉取最新內容,更新本地倉庫內容(非克隆)
- 1、git fetch
- 2、git pull
- 第七步:從遠程倉庫克隆到本地
一、什么是Git遠程倉庫?
目前我們已經掌握了Git基礎操作,對于檔案的增刪改,再也不用擔心檔案的丟失與誤刪問題了,如果還有不了解的可以看下我上章節的Git基礎教程,
對于檔案增刪改的操作,Git與SVN基本沒啥區別,但是GIt究竟強在哪了,這就是我們正要說的Git倉庫,這是Git區別于其他版本控制系統的一個必殺技之一:遠程倉庫,
Git是分布式版本控制系統,同一個Git倉庫,可以分布到不同的機器上,怎么分布呢?最早肯定只有一臺機器有一個原始版本庫,此后,每一臺機器可以從原始版本庫“克隆”一份到自己的電腦,而且每臺機器的版本庫其實都是一樣的,并沒有主次之分,
實際上,可以找一臺電腦充當服務器,也就是遠程倉庫的角色,每天24小時開機,其他每個人都從這個“服務器”倉庫克隆一根到自己的電腦上,并且各自吧自己的修改提交推送到服務器遠程倉庫中,也可以從服務器倉庫中拉取別人的提交推送,
其實吧,自己就可以搭建一臺Git的服務器,不過現階段為了學Git自己搭建一個服務器,完全沒有必要,慶幸的是這個世界有兩個神奇的網站Github和Gitee,
- 從名字
Github就可以看出這個網站就是提供Git倉庫托管服務的,只需要注冊一個Github的賬號,就可以免費獲得Git遠程倉庫,但是由于Github是國外的服務器,有時候運行起來效率比較慢,因此就有了第二個神奇的網站碼云, - 碼云
Gitee是由開源中國基于Gitlab所開發的,專門為開發者提供的穩定、高效安全的云端軟體開發協作平臺,無論是個人、團隊、伙食企業,都能使用碼云實作代碼托管、專案管理、協作開發等操作, - 但是要宣告一點,本文推薦使用碼云
Gitee,并不是說Github差,在代碼托管這方面可以說Github是永遠的神,么的說,目前誰也打不破,但是我們為了學習使用Git代碼托管服務,使用國內的代碼托管服務器碼云效率相對較高點,兩者功能都很強,對于初學者來說,碼云功能更為全面些,適合初學者, - 如果想更加深入了解
Gitee,可以參考Gitee官方幫助檔案, - 賬號自行注冊好,我們就可以創建創建遠程倉庫了,
二、創建遠程倉庫
第一步:新建倉庫



第二步:創建SSH公鑰
由于你的本地Git倉庫和Gitee倉庫之間的傳輸是通過SSH加密的,所以,需要一點設定:
打開Git Bash本地可視化界面視窗:
輸入命令cd ~/.ssh
$ cd ~/.ssh #查看是否存在SSH密鑰(keys)
如果有,先別慌,咱還是先看沒有的情況,沒有咱就自己創建一個公鑰(前提要聯網):
ssh-keygen -t rsa -C "xxx@xx.com" #此命令就是用來創建公鑰的
你需要把郵件地址換成你自己的郵件地址,然后一路回車,使用默認值即可,由于這個Key也不是用于啥軍事機密目的,所以也無需設定密碼,接著一路回車:

可以在用戶主目錄里找到.ssh目錄,里面有id_rsa和id_rsa.pub兩個檔案,這兩個就是SSH Key的秘鑰對,id_rsa是私鑰,不能泄露出去,id_rsa.pub是公鑰,可以放心地告訴任何人,

第三步:查看公鑰
可以使用命令直接打開秘鑰檔案:
$ cat /C:/Users/admin/.ssh/id_rsa.pub
也可以直接到對應的檔案夾中用記事本打開公鑰:

第四步:登錄碼云Gitee,打開當前倉庫設定,添加SSH公鑰



為什么要使用SSH Key呢?因為無論是Github還是Gitee,需要識別出每次推送提交的人員確定是你提交的或者確定是你團隊開發小組人員提交的,而不是別人冒充的,如果沒有公鑰,南無任何人只要知道了你的倉庫地址都可以向你的倉庫推送提交,也可以隨意修改了,這是非常可怕的,
而Gitee支持HTTPS協議,所以只要Gitee知道你本地的公鑰和遠程倉庫中的公鑰是一直的,就可以確定你可以向遠程倉庫提交推送,
當然Gitee允許你添加多個公鑰Key,假定你有若干臺電腦,你一會在公司提交推送,一會兒在家提交推送,只要每臺電腦的公鑰Key都添加到Gitee遠程倉庫中,就可以在每臺電腦上往遠程倉庫推送了,
最后友情提示,無論是在Github還是Gitee上免費托管倉庫,任何人只要知道你的倉庫地址都可以直接看到(但是只有你自己可以修改),所以不要把一些敏感資訊存進去,
如果你不想讓鄙人看到你的Git遠程倉庫,有兩個辦法:
- 一是交錢(保護費),讓Gitee把你一開始創建倉庫時選擇的公開變為私有,這樣別人無法看見了,更不可修改;
- 二是自己手動搭建一個Git服務器,因為是你自己的Git服務器,所有別人根本無法訪問,更別說修改,這個方法在公司中做開發是必備的,
第五步:從本地Git倉庫連接遠程Git倉庫,并做推送
目前,我們在Gitee上的新創建的這個learngit倉庫還是空的,倉庫初始頁還告訴我們,可以從這個倉庫克隆出新的倉庫到本地,也可以將自己本地的倉庫與本地關聯,然后把本地倉庫的內容推送到Gitee上的遠程Git倉庫,

我們根據上述的Git入門教程的指令,在本地的的learngit倉庫中運行以下命令:
#這些指令是在本地創建learngit倉庫,并做初始化,新建readme.txt檔案,提交到本地Git版本庫中
$ mkdir learngit
$ cd learngit
$ git init
$ touch readme.txt
$ git add readme.txt
$ git commit -m "first commit"
因為我本地已經創建過learngit倉庫了,也新建了readme.txt檔案,并添加到了本地Git版本庫中,所以我們直接進行下一步,使用命令git remote add origin "遠程倉庫的地址",這個遠程倉庫地址就是我們上述剛建好遠程倉庫時的HTTPS協議的鏈接地址,連接遠程Git倉庫:
//此行代碼的作用就是連接遠程的learngit倉庫
$ git remote add origin https://gitee.com/itwbs/learngit.git
添加后,遠程庫的名字就是origin,這是Git默認的叫法,也可以改成別的,但是origin這個名字一看就知道是遠程庫,所以還是盡量不要改這個了,
然后我們就直接將本地的內容推送到遠程的learngit倉庫中,使用命令git push -u origin master:
#將本地learngit倉庫的所有內容,推送到遠程的learngit倉庫中
$ git push -u origin master
因為是第一次連接遠程倉庫并推送,所以當你推送回車后,會彈出一個提示框,要求你填寫用戶名和密碼,也就是你Gitee碼云賬號的用戶名和密碼:

然后你會看到推送進度和遠程連接等一系列資訊,如下:
$ git push -u origin master #執行推送
Enumerating objects: 15, done.
Counting objects: 100% (15/15), done.
Delta compression using up to 12 threads
Compressing objects: 100% (10/10), done.
Writing objects: 100% (15/15), 1.25 KiB | 71.00 KiB/s, done.
Total 15 (delta 2), reused 0 (delta 0)
remote: Powered by GITEE.COM [GNK-6.0]
To https://gitee.com/itwbs/learngit.git
* [new branch] master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.
由于推送前遠程的learngit倉庫是空的,我們第一次推送master主分支時,加上了-u引數,Git不但會把我們本地的master主分支推送到遠程新的master主分支中,還會把本地的master分支和遠程的master分支聯系起來了,在以后的推送push或拉取pull時就可以簡化命令了,
此時已經將本地learngit倉庫的內容推送到了遠程的learngit倉庫了,使用git push命令,實際上就是將本地當前的master主分支推送到了遠程,并與遠程的master主分支合并了,
此時我們再次查看遠程的learngit倉庫,就在初始界面,直接重繪,看內容:

你就說強悍不!!!
此時你本地的learngit倉庫和遠程的learngit倉庫時一模一樣的,當你本地無論是對檔案做了修改,還是新添加了檔案,只要做了git commit -m ""提交到本地倉庫了,你想遠程倉庫也有新修改或新添加的內容,就可以直接使用如下命令推送到遠程倉庫中:
$ git push origin master #直接推送到遠程倉庫,并合并遠程的master
第五步:解除本地Git倉庫與遠程Git倉庫的關聯,非“洗掉”
如果添加的時候地址寫錯了,或者就是想洗掉遠程庫,可以用git remote rm <name>命令,使用前,建議先用git remote -v查看遠程庫資訊:
$ git remote -v #查看遠程庫資訊
origin https://gitee.com/itwbs/learngit.git (fetch)
origin https://gitee.com/itwbs/learngit.git (push)
然后,可以根據名字洗掉,比如要洗掉origin:
$ git remote rm origin #洗掉遠程的origin
說明下,上述的洗掉操作,只是解除了本地與遠程的系結關聯關系,并不是物理上的洗掉遠程庫,遠程庫本身并不會做任何改變,
要想真正洗掉遠程庫,需要登錄Gitee,在后臺頁面找到遠程庫,才能真正洗掉,
第六步:從遠程倉庫拉取最新內容,更新本地倉庫內容(非克隆)
首先我們先在遠程learngit倉庫修改test.txt檔案,隨便添加點內容,如下:

然后查看本地的test.txt檔案,確保是空的:
$ cat test.txt #查看確實是空的
也可以記事本打開查看:

此時我們可以從遠程kearngit倉庫直接拉取最新內容合并到本地learngit倉庫中,然后test.txt內容就可以遠程的一樣了,此時我們有兩種拉取的方法,分別如下:
- git fetch
- git pull
兩者有什么區別呢?
1、git fetch
git fetch相當于是從遠程獲取最新版本到遠程的master主分支中,然后將遠程的master注分支帶著最新版的內容拉取到本地倉庫,但是不會自動合并本地倉庫內,也就是需要自己再次合并:
$ git fetch origin master #從遠程倉庫下載所有最新版本的內容
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 286 bytes | 16.00 KiB/s, done.
From https://gitee.com/itwbs/learngit
* branch master -> FETCH_HEAD
1d07bf6..cd180c8 master -> origin/master
然后通過命令查看,下載的最新版的內容與本地倉庫的內容有哪些區別:
$ git log -p master..origin/master #查看日志對比內容
commit cd180c8e4f040b4c440d6c1b4145ca3e4aa54959 (origin/master)
Author: itwbs <1845192312@qq.com>
Date: Sat Aug 14 10:58:45 2021 +0000
update test.txt.
diff --git a/test.txt b/test.txt
index e69de29..591a311 100644
--- a/test.txt
+++ b/test.txt
@@ -0,0 +1 @@
+This is a test.txt.
\ No newline at end of file
很明顯可以看出,對test.txt檔案做了更新,且也顯示出,更新了什么內容,
然后確保資訊沒有什么問題了,通過指令合并到本地倉庫中:
$ git merge origin/master #將遠程的master
Updating 1d07bf6..cd180c8
Fast-forward
test.txt | 1 +
1 file changed, 1 insertion(+)
再次查看test.txt檔案的內容,咦,它有了,真有了,呆發不:
$ cat test.txt #查看內容
This is a test.txt.
2、git pull
**git pull指令相當于是git fetch和git merge兩者的結合體,可以從遠程倉庫拉取最新版本的內容,并直接合并本地的master主分支的內容,如下: **
首選我們可以在遠程再次修改test.txt檔案的內容,如下:

此時我們在本地執行命令git pull:
$ git pull [origin master] #后面的[ ]可選,是為了指定拉取遠程倉庫庫中的哪個分支,默認是master
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 300 bytes | 5.00 KiB/s, done.
From https://gitee.com/itwbs/learngit
cd180c8..b1fe536 master -> origin/master
Updating cd180c8..b1fe536
Fast-forward
test.txt | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
再次查看test.txt檔案內容,可以發現直接更新了,它又有了:
$ cat test.txt
This is a test.txt.
Second update test.txt. #新添加的一行內容
兩者拉取內容對比:
git fetch(推薦使用) | git pull | |
|---|---|---|
| 執行程序 | 顯示git fetch下載最新版本內容到本地,然后手動git merge合并本地的master主分支 | 相當于git fetch與git merge結合體,直接合并到本地master主分支 |
| 安全性 | 安全性較高,在合并前可以先查看詳情資訊,作對比后再合并 | 直接合并,簡單粗暴,容易操作錯誤 |
分布式版本控制系統最大的好處之一就是在本地作業完全不需要考慮遠程庫的存在,也就是有沒有聯網都可以正常作業,當有網的時候再把本地版本庫git push推送到遠程就完成了同步;而SVN在沒有聯網的時候是所有人都不可以作業的!!!
第七步:從遠程倉庫克隆到本地
既然是克隆,我們就可以把我們本地的learngit倉庫給洗掉了,不要有任何顧慮,大膽的刪:

在Git Bash中目錄切換到gitspace下,執行命令git clone "要克隆的遠程倉庫地址"

$ git clone https://gitee.com/itwbs/learngit.git #克隆遠程倉庫
Cloning into 'learngit'...
remote: Enumerating objects: 21, done.
remote: Counting objects: 100% (21/21), done.
remote: Compressing objects: 100% (14/14), done.
remote: Total 21 (delta 2), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (21/21), 1.78 KiB | 27.00 KiB/s, done.
再次查看本地gitspace作業目錄:

又有了,還一模一樣,你說悍不悍!!!
小結:
- 如果有多個人協作開發,那么每個人各自從遠程倉庫克隆一份就行了,
- 無論是Github還是Gitee給出的倉儲地址,都不止一個,因為Git是支持多種協議,支持
HTTPS和SSH,默認的是支持SSH協議,HTTPS與SSH相比,SSH效率較高點,HTTPS除了速度慢點外,還有個麻煩的事,就是每次推送的時候都需要輸入口令,但是HTTPS當然也有優點了,那就是通用性強,基本所有公司都開放的有http埠,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/294332.html
標籤:其他
下一篇:JVM垃圾回收
