做網(wǎng)站主機(jī)客戶管理系統(tǒng)
文章目錄
- 前言
- 一、理解分布式版本控制系統(tǒng)
- 二、遠(yuǎn)程倉(cāng)庫(kù)
- ? ? ? 2.1?新建遠(yuǎn)程倉(cāng)庫(kù)
- ? ? ? 2.2?克隆遠(yuǎn)程倉(cāng)庫(kù)
- ? ? ? 2.3?向遠(yuǎn)程倉(cāng)庫(kù)推送
- ? ? ? 2.4?拉取遠(yuǎn)程倉(cāng)庫(kù)
- 總結(jié)
前言
一、理解分布式版本控制系統(tǒng)
我們目前所說(shuō)的所有內(nèi)容(工作區(qū),暫存區(qū),版本庫(kù)等等),都是在本地!也就是在你的筆記本或者計(jì)算機(jī)上。 而我們的Git其實(shí)是分布式版本控制系統(tǒng)!什么意思呢?
可以簡(jiǎn)單理解為,我們每個(gè)人的電腦上都是一個(gè)完整的版本庫(kù),這樣你工作的時(shí)候,就不需要聯(lián)網(wǎng)了,因?yàn)榘姹編?kù)就在你自己的電腦上。既然每個(gè)人電腦上都有一個(gè)完整的版本庫(kù),那多個(gè)人如何協(xié)作呢?比方說(shuō)你在自己電腦上改了文件A,你的同事也在他的電腦上改了文件A,這時(shí),你們倆之間只需把各自的修改推送給對(duì)方,就可以互相看到對(duì)方的修改了。
分布式版本控制系統(tǒng)的安全性要高很多,因?yàn)槊總€(gè)人電腦里都有完整的版本庫(kù),某一個(gè)人的電腦壞掉了不要緊,隨便從其他人那里復(fù)制一個(gè)就可以了。
在實(shí)際使用分布式版本控制系統(tǒng)的時(shí)候,其實(shí)很少在兩人之間的電腦上推送版本庫(kù)的修改,因?yàn)榭赡苣銈儌z不在一個(gè)局域網(wǎng)內(nèi),兩臺(tái)電腦互相訪問(wèn)不了。也可能今天你的同事病了,他的電腦壓根沒(méi)有開(kāi)機(jī)。因此,分布式版本控制系統(tǒng)通常也有一臺(tái)充當(dāng)“中央服務(wù)器”的電腦,但這個(gè)服務(wù)器的作用僅僅是用來(lái)方便“交換”大家的修改,沒(méi)有它大家也一樣干活,只是交換修改不方便而已。有了這個(gè)“中央服務(wù)器”的電腦,這樣就不怕本地出現(xiàn)什么故障了(比如運(yùn)氣差,硬盤(pán)壞了,上面的所有東西全部丟失,包括git的所有內(nèi)容)
二、遠(yuǎn)程倉(cāng)庫(kù)
Git是分布式版本控制系統(tǒng),同一個(gè)Git倉(cāng)庫(kù),可以分布到不同的機(jī)器上。怎么分布呢?最早,肯定只有一臺(tái)機(jī)器有一個(gè)原始版本庫(kù),此后,別的機(jī)器可以“克隆”這個(gè)原始版本庫(kù),而且每臺(tái)機(jī)器的版本庫(kù)其實(shí)都是一樣的,并沒(méi)有主次之分。你肯定會(huì)想,至少需要兩臺(tái)機(jī)器才能玩遠(yuǎn)程庫(kù)不是?但是我只有一臺(tái)電腦,怎么玩?
其實(shí)一臺(tái)電腦上也是可以克隆多個(gè)版本庫(kù)的,只要不在同一個(gè)目錄下。不過(guò),現(xiàn)實(shí)生活中是不會(huì)有人這么傻的在一臺(tái)電腦上搞幾個(gè)遠(yuǎn)程庫(kù)玩,因?yàn)橐慌_(tái)電腦上搞幾個(gè)遠(yuǎn)程庫(kù)完全沒(méi)有意義,而且硬盤(pán)掛了會(huì)導(dǎo)致所有庫(kù)都掛掉,所以我也不告訴你在一臺(tái)電腦上怎么克隆多個(gè)倉(cāng)庫(kù)。
實(shí)際情況往往是這樣,找一臺(tái)電腦充當(dāng)服務(wù)器的角色,每天24小時(shí)開(kāi)機(jī),其他每個(gè)人都從這個(gè)“服務(wù)器”倉(cāng)庫(kù)克隆一份到自己的電腦上,并且各自把各自的提交推送到服務(wù)器倉(cāng)庫(kù)里,也從服務(wù)器倉(cāng)庫(kù)中拉取別人的提交。
完全可以自己搭建一臺(tái)運(yùn)行Git的服務(wù)器,不過(guò)現(xiàn)階段,為了學(xué)Git先搭個(gè)服務(wù)器絕對(duì)是小題大作。好的,所以,只要注冊(cè)一個(gè)GitHub賬號(hào),就可以免費(fèi)獲得Git遠(yuǎn)程倉(cāng)庫(kù)。管月多務(wù)的,所以,只要注冊(cè)一個(gè)GitHub賬號(hào),就可以免費(fèi)獲得Git遠(yuǎn)程倉(cāng)庫(kù)。
github是國(guó)外的網(wǎng)站,速度比較慢,我們課堂上同統(tǒng)一采用碼云來(lái)托管代碼。下來(lái),我們從零開(kāi)始,使用一下碼云遠(yuǎn)程倉(cāng)庫(kù)。
2.1?新建遠(yuǎn)程倉(cāng)庫(kù)
新建遠(yuǎn)程項(xiàng)?倉(cāng)庫(kù):
填寫(xiě)基本信息:![]()
創(chuàng)建成功:![]()
創(chuàng)建成功后,我們可以對(duì)遠(yuǎn)程倉(cāng)庫(kù)進(jìn)??個(gè)基本的設(shè)置:開(kāi)源or私有![]()
從創(chuàng)建好的遠(yuǎn)程倉(cāng)庫(kù)中我們便能看到,之前在本地學(xué)習(xí)過(guò)的分?,也存在于遠(yuǎn)程倉(cāng)庫(kù)中并被管理起來(lái) 了。剛創(chuàng)建的倉(cāng)庫(kù)有且只有?個(gè)默認(rèn)的master分?.![]()
2.2?克隆遠(yuǎn)程倉(cāng)庫(kù)
克隆/下載遠(yuǎn)端倉(cāng)庫(kù)到本地,需要使? git clone 命令,后?跟上我們的遠(yuǎn)端倉(cāng)庫(kù)的鏈接,遠(yuǎn)端倉(cāng)庫(kù) 的鏈接可以從倉(cāng)庫(kù)中找到:選擇“克隆/下載”獲取遠(yuǎn)程倉(cāng)庫(kù)鏈接:![]()
SSH協(xié)議和HTTPS協(xié)議是Git最常使用的兩種數(shù)據(jù)傳輸協(xié)議。SSH協(xié)議使用了公鑰加密和公鑰登陸機(jī)制,體現(xiàn)了其實(shí)用性和安全性,使用此協(xié)議需要將我們的公鑰放上服務(wù)器,由Git服務(wù)器進(jìn)行管理。使用HTTPS方式時(shí),沒(méi)有要求,可以直接克隆下來(lái)。
使用HTTPS方式:代碼示例:hyb@139-159-150-152:~$ git clone https://gitee.com/hyb91/git_teaching.gitCloning into 'git_teaching'...Username for 'https://gitee.com': hyb91Password for 'https://hyb91@gitee.com':remote: Enumerating objects: 4, done.remote: Counting objects: 100% (4/4), done.remote: Compressing objects: 100% (4/4), done.remote: Total 4 (delta 0), reused 0 (delta 0), pack-reused 0Unpacking objects: 100% (4/4), 1.80 KiB | 1.80 MiB/s, done.hyb@139-159-150-152:~$ lsgitcode git_teachinghyb@139-159-150-152:~$ ls git_teaching/README.en.md README.md
使用 SSH 方式:hyb@139-159-150-152:~$ git clone git@gitee.com:hyb91/git_teaching.gitCloning into 'git_teaching'...The authenticity of host 'gitee.com (212.64.63.215)' can't be established.ECDSA key fingerprint is SHA256:FQGC9Kn/eye1W8icdBgrQp+KkGYoFgbVr17bmjey0Wc.Are you sure you want to continue connecting (yes/no/[fingerprint])? yesWarning: Permanently added 'gitee.com,212.64.63.215' (ECDSA) to the list of knowgit@gitee.com: Permission denied (publickey).fatal: Could not read from remote repository.Please make sure you have the correct access rightsand the repository exists.
使用SSH方式克隆倉(cāng)庫(kù),由于我們沒(méi)有添加公鑰到遠(yuǎn)端庫(kù)中,服務(wù)器拒絕了我們的clone鏈接。需要我們?cè)O(shè)置一下:第一步:創(chuàng)建SSH Key。在用戶主目錄下,看看有沒(méi)有.ssh目錄,如果有,再看看這個(gè)目錄下有沒(méi)有id_rsa和id_rsa.pub這兩個(gè)文件,如果已經(jīng)有了,可直接跳到下一步。如果沒(méi)有,需要?jiǎng)?chuàng)建SSH Key:代碼示例:# 注意要輸???的郵箱,然后?路回?,使?默認(rèn)值即可hyb@139-159-150-152:~$ ssh-keygen -t rsa -C "2689241679@qq.com"Generating public/private rsa key pair.Enter file in which to save the key (/home/hyb/.ssh/id_rsa):Enter passphrase (empty for no passphrase):Enter same passphrase again:Your identification has been saved in /home/hyb/.ssh/id_rsaYour public key has been saved in /home/hyb/.ssh/id_rsa.pubThe key fingerprint is:SHA256:sepKZUwKIXjJxYcot49tvOW+Aa+pEhdsRqVDFSmgQZo 2689241679@qq.comThe key's randomart image is:+---[RSA 3072]----+|*+oB=+ ||==Oo+ . ||E*+o .. . || *o + o || o *o + S ||. o ==.. || o ..++ ||. ..+.. || ...+o+. |+----[SHA256]-----+
順利的話,可以在用戶主自錄里找到.ssh目錄,里面有id_rsa和id_rsa.pub)兩個(gè)文件,這兩個(gè)就是SSHKey的秘鑰對(duì),id_rsa是私鑰,不能泄露出去,id_rsa.pub是公鑰,可以放心地告訴任何人。代碼示例:hyb@139-159-150-152:~$ ls -a .ssh/. .. id_rsa id_rsa.pub known_hosts
?第?步:添加??的公鑰到遠(yuǎn)端倉(cāng)庫(kù)。![]()
點(diǎn)擊 ssh公鑰 選項(xiàng),進(jìn)?設(shè)置:
![]()
點(diǎn)擊確認(rèn)后,需要對(duì)你進(jìn)?認(rèn)證,輸?你的賬號(hào)密碼即可。?此,我們的準(zhǔn)備?作全部做完,歡快的clone吧。代碼示例:1 hyb@139-159-150-152:~$ git clone git@gitee.com:hyb91/git_teaching.git2 Cloning into 'git_teaching'...3 Warning: Permanently added the ECDSA host key for IP address '212.64.63.190' to4 remote: Enumerating objects: 4, done.5 remote: Counting objects: 100% (4/4), done.6 remote: Compressing objects: 100% (4/4), done.7 remote: Total 4 (delta 0), reused 0 (delta 0), pack-reused 08 Receiving objects: 100% (4/4), done.10 hyb@139-159-150-152:~$ ls11 gitcode git_teaching12 hyb@139-159-150-152:~$ ls git_teaching/13 README.en.md README.md
done,成功!如果有多個(gè)人協(xié)作開(kāi)發(fā),GitHub/Gitee允許添加多個(gè)公鑰,只要把每個(gè)人的電腦上的Key都添加到GitHub/Gitee,就可以在每臺(tái)電腦上往GitHub/Gitee上提交推送了。
當(dāng)我們從遠(yuǎn)程倉(cāng)庫(kù)克隆后,實(shí)際上Git 會(huì)自動(dòng)把本地的master分支和遠(yuǎn)程的master分支對(duì)應(yīng)起來(lái),并且,遠(yuǎn)程倉(cāng)庫(kù)的默認(rèn)名稱是origin。在本地我們可以使用git remote命令,來(lái)查看遠(yuǎn)程庫(kù)的信息,如:
代碼示例:
hyb@139-159-150-152:~/git_teaching$ git remoteorigin或者,用git remote -v顯示更詳細(xì)的信息:代碼示例:hyb@139-159-150-152:~/git_teaching$ git remote -vorigin git@gitee.com:hyb91/git_teaching.git (fetch)origin git@gitee.com:hyb91/git_teaching.git (push)上面顯示了可以抓取和推送的origin的地址。如果沒(méi)有推送權(quán)限,就看不到push的地址。推送是什么意思呢,我們繼續(xù)往下看。
2.3?向遠(yuǎn)程倉(cāng)庫(kù)推送
本地已經(jīng) clone 成功遠(yuǎn)程倉(cāng)庫(kù)后,我們便可以向倉(cāng)庫(kù)中提交內(nèi)容。例如新增?個(gè) file.txt 文件:
代碼示例:
# 新建?件hyb@139-159-150-152:~/git_teaching$ lsREADME.en.md README.mdhyb@139-159-150-152:~/git_teaching$ vim file.txthyb@139-159-150-152:~/git_teaching$ cat file.txthello git# 提交?件hyb@139-159-150-152:~/git_teaching$ git add .hyb@139-159-150-152:~/git_teaching$ git commit -m"create file.txt"[master 7ce3183] create file.txt1 file changed, 1 insertion(+)create mode 100644 file.txt
提交時(shí)要注意,如果我們之
前設(shè)置過(guò)全局的name和e-mail,這兩項(xiàng)配置需要和gitee上配置的用戶名和郵箱一致,否則會(huì)出錯(cuò)。
或者從來(lái)沒(méi)有設(shè)置過(guò)全局的name和e-mail,那么我們第一次提交時(shí)也會(huì)報(bào)錯(cuò)。這就需要我們重新配置下了,同樣要注意需要和gitee上配置的用戶名和郵箱一致。如何配置已講過(guò),在這里就不再贅述。
到這里我們已經(jīng)將內(nèi)容提交至本地倉(cāng)庫(kù)中,如何將本地倉(cāng)庫(kù)的內(nèi)容推送至遠(yuǎn)程倉(cāng)庫(kù)呢,需要使用git? push命令,該命令用于將本地的分支版本上傳到遠(yuǎn)程并合并,
命令格式如下:
代碼示例:
git push <遠(yuǎn)程主機(jī)名> <本地分支名>:<遠(yuǎn)程分支名># 如果本地分支名與遠(yuǎn)程分支名相同,則可以省略冒號(hào):git push <遠(yuǎn)程主機(jī)名> <本地分支名>
此時(shí)我們要將本地的 master 分支推送到 origin 主機(jī)的master分支,則可以:使用git push origin master命令;代碼示例:hyb@139-159-150-152:~/git_teaching$ git push origin masterEnumerating objects: 4, done.Counting objects: 100% (4/4), done.Compressing objects: 100% (2/2), done.Writing objects: 100% (3/3), 308 bytes | 308.00 KiB/s, done.Total 3 (delta 0), reused 0 (delta 0)remote: Powered by GITEE.COM [GNK-6.4]To gitee.com:hyb91/git_teaching.gitc6ce3f0..7ce3183 master -> master
說(shuō)明:
推送成功!這里由于我們使用的是SSH協(xié)議,是不用每一次推送都輸入密碼的,方便了我們的推送操作。如果你使用的是HTTPS協(xié)議,有個(gè)麻煩地方就是每次推送都必須輸入口令。
接下來(lái),看看碼云遠(yuǎn)端:![]()
代碼已經(jīng)被推送至遠(yuǎn)端了∶![]()
2.4?拉取遠(yuǎn)程倉(cāng)庫(kù)
在 gitee 上點(diǎn)擊 README.md文件并在線修改它:
修改內(nèi)容:
此時(shí),遠(yuǎn)程倉(cāng)庫(kù)是要領(lǐng)先于本地倉(cāng)庫(kù)一個(gè)版本,為了使本地倉(cāng)庫(kù)保持最新的版本,我們需要拉取下遠(yuǎn)端代碼,并合并到本地。Git提供了 git pull 命令 ,該命令用于從遠(yuǎn)程獲取代碼并合并本地的版本。示例格式如下:git pull <遠(yuǎn)程主機(jī)名> <遠(yuǎn)程分支名>:<本地分支名># 如果遠(yuǎn)程分支是與當(dāng)前分支合并,則冒號(hào)后面的部分可以省略。?git pull <遠(yuǎn)程主機(jī)名> <遠(yuǎn)程分支名>代碼示例:# 拉取遠(yuǎn)程分支,并與當(dāng)前分支進(jìn)行合并hyb@139-159-150-152:~/git_teaching$ git pull origin masterremote: Enumerating objects: 5, done.remote: Counting objects: 100% (5/5), done.remote: Compressing objects: 100% (3/3), done.remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0Unpacking objects: 100% (3/3), 1.02 KiB | 1.02 MiB/s, done.From gitee.com:hyb91/git_teaching* branch master -> FETCH_HEAD7ce3183..60e6b0a master -> origin/masterUpdating 7ce3183..60e6b0aFast-forwardREADME.md | 2 ++1 file changed, 2 insertions(+)hyb@139-159-150-152:~/git_teaching$ cat README.md...第一次修改內(nèi)容我們發(fā)現(xiàn),拉取成功了!