Git

Shell和vi

shell

在計(jì)算機(jī)科學(xué)中,Shell俗稱殼,用來區(qū)別于Kernel(核),是指“提供使用者使用界面”的軟件(命令解析器)。它類似于DOS下的command和后來的cmd.exe。它接收用戶命令,然后調(diào)用相應(yīng)的應(yīng)用程序

shell的分類

  • 圖形界面shell:通過提供友好的可視化界面,調(diào)用相應(yīng)應(yīng)用程序,如windows系列操作系統(tǒng),Linux系統(tǒng)上的圖形化應(yīng)用程序GNOME、KDE等.
  • 命令行shell:通過鍵盤輸入特定命令的方式,調(diào)用相應(yīng)的應(yīng)用程序,如windows系統(tǒng)的cmd.exe、Windows PowerShell,Linux系統(tǒng)的Bourne shell ( sh)、Bourne Again shell ( bash)等。

認(rèn)識(shí)bash這個(gè)shell

在window系統(tǒng)下使用bash,需要一個(gè)軟件,這個(gè)軟件模擬集成了bash大部分命令。
各個(gè) shell 的功能都差不多, Linux 默認(rèn)使用 bash ,所以我們主要學(xué)習(xí)bash的使用。

  • 1 bash命令格式
    命令 [-options] [參數(shù)],如:tar zxvf demo.tar.gz
    查看幫助:命令 --help
  • 2 bash常見命令
命令 描述 舉例
pwd (Print Working Directory) 查看當(dāng)前目錄
cd (Change Directory) 切換目錄, 如 cd /etc
ls (List) 查看當(dāng)前目錄下內(nèi)容, 如 ls -al
mkdir (Make Directory) 創(chuàng)建目錄, 如 mkdir blog
touch 創(chuàng)建文件, 如 touch index.html
cat 查看文件全部內(nèi)容, 如 cat index.html
more/less 查看文件, 如more /etc/passwd、less /etc/passwd
rm (remove) 刪除文件, 如 rm index.html、rm -rf blog
rmdir (Remove Directory) 刪除文件夾,只能刪除空文件夾,不常用
mv (move) 移動(dòng)文件或重命名, 如 mv index.html ./demo/index.html
cp (copy) 復(fù)制文件, cp index.html ./demo/index.html
head 查看文件前幾行, 如 head -5 index.html
tail 查看文件后幾行 –n –f, 如 tail index.html、tail -f -n 5 index.html
tab 自動(dòng)補(bǔ)全,連按兩次會(huì)將所有匹配內(nèi)容顯示出來
history 查看操作歷史
> 和 >> 重定向, 如echo hello world! > README.md ,>覆蓋 >>追加
wget 下載, 如wget https://nodejs.org/dist/v4.4.0/node-v4.4.0.tar.gz
tar 解壓縮, 如tar zxvf node-v4.4.0.tar.gz
curl 網(wǎng)絡(luò)請(qǐng)求, 如curl http://www.baidu.com
whoami 查看當(dāng)前用戶

管道符可以將多個(gè)命令連接使用,上一次(命令)的執(zhí)行結(jié)果當(dāng)成下一次(命令)的參數(shù)。
grep 匹配內(nèi)容,一般結(jié)合管道符使用

vi 編輯器

如同Windows下的記事本,vi編輯器是Linux下的標(biāo)配,通過它我們可以創(chuàng)建、編輯文件。它是一個(gè)隨系統(tǒng)一起安裝的文本編輯軟件.

三種模式

vi編輯器提供了3種模式,分別是命令模式、插入模式、底行模式,每種模式下用戶所能進(jìn)行的操作是不一樣的。
3種模式的切換如下圖所示

三種模式.jpg

通過上圖我們發(fā)現(xiàn),輸入模式是不能直接切換到末行模式的,必須要先切回到命令模式(按ESC鍵)

使用vi編輯器

  • a) 打開/創(chuàng)建文件, vi 文件路徑
  • b) 底行模式 :w保存,:w filenme另存為
  • c) 底行模式 :q退出
  • d) 底行模式 :wq保存并退出
  • e) 底行模式 :e! 撤銷更改,返回到上一次保存的狀態(tài)
  • f) 底行模式 :q! 不保存強(qiáng)制退出
  • g) 底行模式 :set nu 設(shè)置行號(hào)
  • h) 命令模式 ZZ(大寫)保存并退出
  • i) 命令模式 u轍銷操作,可多次使用
  • j) 命令模式 dd刪除當(dāng)前行
  • k) 命令模式 yy復(fù)制當(dāng)前行
  • l) 命令模式 p 粘貼內(nèi)容
  • m) 命令模式 ctrl+f向前翻頁
  • n) 命令模式 ctrl+b向后翻頁
  • o) 命令模式 i進(jìn)入編輯模式,當(dāng)前光標(biāo)處插入
  • p) 命令模式 a進(jìn)入編輯模式,當(dāng)前光標(biāo)后插入
  • q) 命令模式 A進(jìn)入編輯模式,光標(biāo)移動(dòng)到行尾
  • r) 命令模式 o進(jìn)入編輯模式,當(dāng)前行下面插入新行
  • s) 命令模式 O進(jìn)入編輯模式,當(dāng)前行上面插入新行
    當(dāng)我們處在編輯模式的情況下,和我們?cè)赪indows編輯器的使用相似

SSH

SSH是一種網(wǎng)絡(luò)協(xié)議,用于計(jì)算機(jī)之間的加密登錄。
SSH只是一種協(xié)議,存在多種實(shí)現(xiàn),既有商業(yè)實(shí)現(xiàn),也有開源實(shí)現(xiàn)。本文針對(duì)的是OpenSSH,它是自由軟件,應(yīng)用非常廣泛。
如果要在Windows系統(tǒng)中使用SSH,會(huì)用到另一種軟件PuTTY,我們后面用到的Git客戶也集成了SSH
格式:ssh user@host
user 代表真實(shí)存在的用戶host代表要登錄的遠(yuǎn)程計(jì)算機(jī)
常見有兩種加密技術(shù),分別是對(duì)稱性加密非對(duì)稱性加密,SSH屬于后者。
對(duì)稱加密算法在加密和解密時(shí)使用的是同一個(gè)密鑰;而非對(duì)稱加密算法需要兩個(gè)密鑰來進(jìn)行加密和解密,這兩個(gè)秘鑰分別是公開密鑰(public key,簡稱公鑰)和私有密鑰(private key,簡稱私鑰)。
工作原理
公鑰和私鑰是成對(duì)出現(xiàn),可以通過ssh-keygen -t rsa來創(chuàng)建,既可以通過密鑰來加密數(shù)據(jù),也可以通過私鑰來加密數(shù)據(jù),如果是以公鑰進(jìn)行的數(shù)據(jù)加密,只能與之相對(duì)應(yīng)的私鑰才可以解密,相反如果以私鑰進(jìn)行的數(shù)據(jù)加密,則只能與之對(duì)應(yīng)的公鑰才可以將數(shù)據(jù)進(jìn)行解密,這樣就可以提高信息傳遞的安全性。
免密碼登錄
我們可以將本地機(jī)器上的公鑰保存到特定的遠(yuǎn)程計(jì)算機(jī)上,這樣當(dāng)我們?cè)俅蔚卿浽L問這臺(tái)遠(yuǎn)程計(jì)算機(jī)時(shí)就可以實(shí)現(xiàn)免密碼登錄了。

  • 1、ssh-keygen -t rsa會(huì)創(chuàng)建公鑰和密鑰(默認(rèn)在用戶目錄/.ssh目錄下)
  • 2、ssh-copy-id user@host添加到對(duì)應(yīng)遠(yuǎn)程主機(jī)的用戶目錄/.ssh目錄下
  • 3、也可以登錄遠(yuǎn)程主機(jī),進(jìn)入到用戶目錄/.ssh目錄下手動(dòng)創(chuàng)建authorized_keys文件,并將自已的公鑰粘入該文件。

版本控制

關(guān)于版本控制

版本控制(Version Control Systems)是一種記錄一個(gè)或若干文件內(nèi)容變化,以便將來查閱特定版本修訂情況的系統(tǒng)。這個(gè)系統(tǒng)可以自動(dòng)幫我們備份文件的每一次更改,并且可以非常方便的恢復(fù)到任意的備份(版本)狀態(tài)。
舉例:我們通常都是手動(dòng)的重命名一個(gè)文件進(jìn)行備份的,index.html改成index1.html或者index.html.bak等形式,然后這種方式對(duì)于單個(gè)文件我們還能夠管理,但是對(duì)于整個(gè)項(xiàng)目而言,就會(huì)成為噩夢了?。?!我們不得不借助于軟件來實(shí)現(xiàn)。
實(shí)現(xiàn)版本控制的軟件有很多種類,大致可以分為本地版本控制系統(tǒng)、集中式版本控制系統(tǒng)、分布式版本控制系統(tǒng)。

本地版本控制

借助軟件我們可以記錄下文件的每一次修改,如下圖所示,文件被修改后,記錄下了3個(gè)版本,這樣我們通過版本控制系統(tǒng)(軟件)便可以非常方便的恢復(fù)到任意版本。

版本控制1.jpg

這種類型的版本控制系統(tǒng),功能比較單一,比如很難實(shí)現(xiàn)多人協(xié)同開發(fā),所以現(xiàn)在幾乎很少使用了。

集中式版本控制

實(shí)際開發(fā)環(huán)境,一個(gè)項(xiàng)目通常是由多人協(xié)作共同完成的,如何讓在不同終端上的開發(fā)者協(xié)同工作成了亟待解決的問題,集中式版本控制系統(tǒng)便應(yīng)運(yùn)而生了。它通過單一的集中管理的服務(wù)器,保存所有文件的修訂版本,協(xié)同工作的開發(fā)者都通過客戶端連到這臺(tái)服務(wù)器,取出最新的文件或者提交更新。其代表為SVN,如下圖所示

版本控制2.jpg

這種方式很好解決了多人協(xié)同開發(fā)的問題,但是也有一個(gè)弊端,如果集中管理的服務(wù)器出現(xiàn)故障,將會(huì)導(dǎo)致數(shù)據(jù)(版本)丟失的風(fēng)險(xiǎn),另外協(xié)同開發(fā)者從集中服務(wù)器中更新數(shù)據(jù)時(shí),嚴(yán)重依賴網(wǎng)絡(luò),如果網(wǎng)絡(luò)不佳,也給開發(fā)帶來諸多不便。

分布式版本控制系統(tǒng)

分布式版本控制系統(tǒng),則不需要中央服務(wù)器,每個(gè)協(xié)同開發(fā)者都擁有一個(gè)完整的版本庫,這么一來,任何協(xié)同開發(fā)者用的服務(wù)器發(fā)生故障,事后都可以用其它協(xié)同開發(fā)者本地倉庫恢復(fù)。
由于版本庫在本地計(jì)算機(jī),也便不再受網(wǎng)絡(luò)影響了。如果要將本地的修改,推送給其它協(xié)同開發(fā)者,還需要一臺(tái)共享服務(wù)器,所有開發(fā)者通過這臺(tái)共享服務(wù)器同步和更新數(shù)據(jù)。如下圖所示。

版本控制3.jpg

分布式版本控制系統(tǒng)彌補(bǔ)了前面兩種版本控制系統(tǒng)的缺陷,成為了版本控制的首選方案。其代表就是Git

Git

window安裝
http://git-scm.com/download/win下載Git客戶端軟件,和普通軟件安裝方式一樣。
Linux安裝
CentOS發(fā)行版:sudo yum install git
Ubuntu發(fā)行版:sudo apt-get install git
Mac安裝
打開Terminal直接輸入git命令,會(huì)自動(dòng)提示,按提示引導(dǎo)安裝即可。

Git工作原理

為了更好的學(xué)習(xí)Git,我們們必須了解Git管理我們文件的3種狀態(tài),分別是已提交(committed)、已修改(modified)和已暫存(staged),由此引入 Git 項(xiàng)目的三個(gè)工作區(qū)域的概念:Git 倉庫工作目錄以及暫存區(qū)域
Git倉庫目錄是Git用來保存項(xiàng)目的元數(shù)據(jù)和對(duì)象數(shù)據(jù)庫的地方。 這是Git 中最重要的部分,從其它計(jì)算機(jī)克隆倉庫時(shí),拷貝的就是這里的數(shù)據(jù)。
工作目錄是對(duì)項(xiàng)目的某個(gè)版本獨(dú)立提取出來的內(nèi)容。這些從Git倉庫的壓縮數(shù)據(jù)庫中提取出
來的文件,放在磁盤上供你使用或修改。
暫存區(qū)域是一個(gè)文件,保存了下次將提交的文件列表信息,一般在Git倉庫目錄中。有時(shí)候也被稱作“索引”(Index),不過一般說法還是叫暫存區(qū)域。

Git1.jpg

基本的Git工作流程如下:

  • 1、在工作目錄中修改文件。
  • 2、暫存文件,將文件的快照放入暫存區(qū)域。
  • 3、提交文件,找到暫存區(qū)域的文件,將快照永久性存儲(chǔ)到Git倉庫目錄。

Git本地倉庫

Git本地倉庫值得是開發(fā)者開發(fā)設(shè)備中倉庫

Git基礎(chǔ)

命令行方式:任意目錄(建議開發(fā)根目錄)右鍵 > Git Bash Here

1.配置用戶

配置用戶的意義在于記錄開發(fā)者信息,以便在版本控制記錄開發(fā)者的操作行為,如lion于2016-08-24解決了一個(gè)bug。
git config --global user.name "自已的名字"
git config --global user.email"自已的郵箱地址"
--global 配置當(dāng)前用戶所有倉庫
--system 配置當(dāng)前計(jì)算機(jī)上所有用戶的所有倉庫
注:配置用戶只需要執(zhí)行1次,可以重復(fù)使用。

2.初始化倉庫

我們?nèi)绻胍胓it進(jìn)行版本控制,需要將現(xiàn)有項(xiàng)目初始化為一個(gè)倉庫,或者將一個(gè)已有的使用git進(jìn)行版本控制的倉庫克隆到本地.

  • git init

Git02.png

git init只是創(chuàng)建了一個(gè)名為.git的隱藏目錄,這個(gè)目錄就是存儲(chǔ)我們歷史版本的倉庫,ls -al可以查看。

Git03.png
  • 假如公司已有項(xiàng)目用了Git,那我們就利用克隆
    git clone倉庫地址

Paste_Image.png

執(zhí)行完這個(gè)命令,會(huì)在當(dāng)前目錄下生成一個(gè)Monment目錄(默認(rèn)和倉庫名稱相同),這個(gè)便是已有一個(gè)使用Git管理的項(xiàng)目

Git04
查看文件狀態(tài)

初始化倉庫后便可以進(jìn)行開發(fā)了,進(jìn)入到剛剛創(chuàng)建好并初始為倉庫的目錄,添加我們開發(fā)需要的文件。
通過git status可以檢測當(dāng)前倉庫文件的狀態(tài)

Git05.png

:git會(huì)忽略空的目錄

4.添加文件到暫緩區(qū)

假設(shè)經(jīng)過一段時(shí)間的開發(fā)后,需要把已開發(fā)的部分存起來,使用git add 添加到暫存區(qū)。
git add 文件名/ 文件路徑 “*”或-A代表所有

Git06.png

放到暫存區(qū)的文件被標(biāo)記成了綠色,等待提交。
:顏色是工具給添加的,目的是增加可讀性并不是git統(tǒng)一的。

5、撤銷更改

繼續(xù)我們的開發(fā)
再次git status可以再次查看倉庫狀態(tài)

Git.07png

說明index.html再次被修改了,并被標(biāo)記了紅色。
又經(jīng)過一段時(shí)間后發(fā)現(xiàn)新開發(fā)的部分有Bug,想要回到之前狀態(tài),可以使用git checkout 文件名.

Git08.png

:從暫存區(qū)還原原到工作區(qū)

5.提交文件

經(jīng)過一個(gè)相對(duì)較長階段開發(fā)或者一個(gè)功能開發(fā)完成了,就可以提交到本地倉庫了,永久保存了。
git commit -m '備注信息'

Paste_Image.png

將暫存區(qū)被標(biāo)記成綠色的文件,全部提交到本地倉庫存儲(chǔ)。
這時(shí)git status查看狀態(tài)

Git08.png

沒有什么可提交的,變的很干凈.

6.查看提交歷史

反反復(fù)復(fù)開發(fā)了很多的功能了,通過git log查看一下提交的歷史

Git09.png

我們可以查看到一次次提交記錄
commit 81b1e4fc2ae178caedf4575596377a80a6f1e73f
代表一次提交的唯一ID,一般稱為SHA值。傻?
:按鍵盤q鍵退出。

7.再次檢測倉庫文件狀態(tài)

隔了好些天后,繼續(xù)開發(fā)
git status 查看狀態(tài)

Git10.png

又提示有修改,等待重新添加到暫存區(qū).

8.重新添加暫存區(qū)然后提交
Git11.png
9.再次查看歷史

git log 可查到所有提交歷史

Git12.png

這時(shí)可以查看到更多提交歷史。
這時(shí)關(guān)掉所有目錄甚至關(guān)機(jī)!

10.恢復(fù)上一次提交的狀態(tài)

通過SHA值可以回到之前某一次的提交(時(shí)光倒流)
git reset --hard c888a614e072e2這樣便回到了支付功能的狀態(tài)
git log再次查看發(fā)現(xiàn)最后一次提交成了支付功能了

Git13.png
倉儲(chǔ)示意圖.jpg
Git分支

在我們的現(xiàn)實(shí)開發(fā)中,需求往往是五花八門的,同時(shí)開發(fā)個(gè)需求的情況十分常見,比如當(dāng)你正在專注開發(fā)一個(gè)功能時(shí),突然有一個(gè)緊急的BUG需要你來修復(fù),這個(gè)時(shí)候我們當(dāng)然是希望在能夠保存當(dāng)前任務(wù)進(jìn)度,再去修改這個(gè)BUG,等這個(gè)BUG修復(fù)完成后再繼續(xù)我們的任務(wù)。如何實(shí)現(xiàn)呢?
通過Git創(chuàng)建分支來解決實(shí)際開發(fā)中類似的問題。
在Git的使用過程中一次提交稱為歷史記錄(版本),并且會(huì)生成一個(gè)唯一的字符串,如下圖

Git14.png

這個(gè)串可以代表某一個(gè)歷史版本(實(shí)際使用只取前面幾位就可以),
值得注意的是所有的提交(commit)實(shí)際上都是在分支(branch)的基礎(chǔ)上進(jìn)行的。

Git..jpg

當(dāng)我們?cè)诔跏蓟瘋}庫的時(shí)候(實(shí)際上是產(chǎn)生第1次提交時(shí)),Git會(huì)默認(rèn)幫我們創(chuàng)建了一個(gè)master的分支,并且有指針(HEAD)指到了末端。
指針(HEAD)用來標(biāo)明當(dāng)前處于哪個(gè)分支的哪個(gè)版本,如上圖指的處于master分支的最后1個(gè)版本。
我們也可以創(chuàng)建自已的分支

1、創(chuàng)建分支

git branch hotfix
新的分支會(huì)在當(dāng)前分支原有歷史版本的結(jié)點(diǎn)上進(jìn)行創(chuàng)建,我稱其為子分支如下圖

branch2.jpg

新建的子分支會(huì)繼承父分支的所有提交歷史。

2.切換分支

git checkout hotfix

branch3.jpg

我們發(fā)現(xiàn)HEAD現(xiàn)在又指向了hotfix的末端。

3.再次提交操作

修改bug后,提交

branch4.jpg

這次的提交歷史版本就會(huì)記錄在hotfix這個(gè)分支上了,并且HEAD伴隨hotfix在移動(dòng)。

4.當(dāng)我們?cè)俅吻谢氐絤aster時(shí)
branch5.jpg

當(dāng)我們切換回master后,HEAD指向了master分支的末端,并且我們觀察發(fā)現(xiàn)我們的文件內(nèi)容還是原來的“模樣”。

5.繼續(xù)之前的開發(fā)

branch6.jpg

總結(jié):當(dāng)我們git checkout branchname時(shí),HEAD會(huì)自動(dòng)指向?qū)?yīng)分支的末端,工作目錄中的源碼也會(huì)隨之發(fā)生改變。
這個(gè)時(shí)候我們就在hotfix這個(gè)分支上修復(fù)了這個(gè)BUG,而我們?cè)瓉碓趍aster分支上的操作并未受到影響。
思考一個(gè)問題:
現(xiàn)在master這個(gè)分支上是否包含了hotfix的修復(fù)呢?
實(shí)際上從上圖可以看出這時(shí)的master分支并沒有包含有hotfix的修復(fù)

6.合并(融合)分支

branch7.jpg

這時(shí)master會(huì)有兩個(gè)父結(jié)點(diǎn)了,master便包含了`hotfix里的修復(fù)了

7.刪除分支

git branch -d hotfix
這時(shí)用來修復(fù)BUG創(chuàng)建的hotfix分支已經(jīng)沒有用處了,我們可以將它刪除

branch9.jpg

Git遠(yuǎn)程(共享)倉庫

通過上面學(xué)習(xí)我們可以很好的管理本地版本控制了,可是如果我們下班回到家里突然來了靈感覺得有部分代碼可以優(yōu)化,如果能接著公司電腦上的代碼繼續(xù)寫該有多好呀!另一種情形,假設(shè)項(xiàng)目比較大,不同的功能模塊由不同的開發(fā)人員完成,不同模塊兒之間又難免會(huì)依賴關(guān)系,這時(shí)如果我們的代碼互相合并(融合)該有多好呀!所有模塊開發(fā)完畢后,需要整合到一起,要能做到準(zhǔn)確無誤該有多好呀!

借助一個(gè)遠(yuǎn)程倉庫,大家可以共享代碼、歷史版本等數(shù)據(jù),便可以解決以上遇到的所有問題,在學(xué)習(xí)遠(yuǎn)程倉庫前我們先來學(xué)習(xí)git clone path這個(gè)命令。

創(chuàng)建共享倉庫

Git要求共享倉庫是一個(gè)以.git結(jié)尾的目錄。

mkdir repo.git 創(chuàng)建以.git結(jié)尾目錄

cd repo.git 進(jìn)入這個(gè)目錄

git init --bare 初始化一個(gè)共享倉庫,也叫裸倉庫 注意選項(xiàng)--bare

共享倉儲(chǔ)

這樣我們就建好了一個(gè)共享的倉庫,但這時(shí)這個(gè)倉庫是一個(gè)空的倉庫,并且不允在這個(gè)倉庫中進(jìn)行任何修改

向共享倉庫共享(同步)內(nèi)容

將自已開發(fā)的項(xiàng)目同步到這個(gè)目錄中,其它開發(fā)者就可以共享你開發(fā)的項(xiàng)目了。

  • 1、進(jìn)入到yike目錄
  • 2、git push ../repo.git master
共享倉庫

這樣便把yike中的項(xiàng)目同步進(jìn)了repo.git中。

5.從共享倉庫里取出內(nèi)容

1、新創(chuàng)建一個(gè)目錄(模擬另一個(gè)開發(fā)者)
2、git clone ./repo.git demo

共享提取.png

通過repo.git共享倉庫,我們輕松得到了一個(gè)yike的副本

6.通過demo倉庫向repo.git共享內(nèi)容

進(jìn)入到demo里,我們做一些修改
cd demo
git push ../repo.git master

共享內(nèi)容.png
7.在360倉庫從repo.git獲取共享的內(nèi)容

cd yike
git pull ../repo.git master

獲取共享.png

奇跡似乎發(fā)生了,我們輕松的將demo倉庫里的內(nèi)容,通過repo.git共享給了yike倉庫。
驚喜不斷,問題也總是不斷,我們發(fā)現(xiàn)我們這個(gè)共享的倉庫只是放到了本地的,其它人是沒有辦法從我們這個(gè)共享倉庫共享內(nèi)容的?。。?br> 然而現(xiàn)實(shí)是,辦法總是有的?。。?!
我們把這個(gè)共享的倉庫放到一臺(tái)遠(yuǎn)程服務(wù)器上,問題不就解決了嗎?

gitHub和gitLab

如果我們熟悉服務(wù)器的話,我們完全可以將上述的步驟在我們的遠(yuǎn)程服務(wù)器上進(jìn)行操作,然后再做一些登錄權(quán)限的設(shè)置,就可非常完美的搭建一個(gè)共享服務(wù)器了。其實(shí)為了更好的管理我們的倉庫,一些第三方機(jī)構(gòu)開發(fā)出了Web版?zhèn)}庫管理程序,通過Web界面形式管理倉庫。
gitHub關(guān)于它的名氣與意義,大家可以自行查閱,我們這里介紹它的使用

1、注冊(cè)賬號(hào)并完善資料
自行注冊(cè)略過
2、創(chuàng)建共享倉庫

git.png

3、填寫倉庫資料

git1

4、共享倉庫

git2

遠(yuǎn)程地址特別長,我們可以給他起一個(gè)別名

git remote add origin

git@github.com:Botue/repo.git

這樣origin 就代表 git@github.com:Botue/repo.git

當(dāng)我們通過git clone從共享倉庫獲內(nèi)容時(shí),會(huì)自動(dòng)幫我們添加origin到對(duì)應(yīng)的倉庫地址,例如:git clone git@github.com:Botue/repo.git 會(huì)自動(dòng)添加origin 對(duì)應(yīng) git@github.com:Botue/repo.git

5、生成密鑰
ssh-keygen -t rsa然后一路回車,這里會(huì)在當(dāng)前用戶生成了一個(gè).ssh的文件夾

git3

id_rsa.pub公鑰的內(nèi)容復(fù)制

打開gitHub的個(gè)人中心

git4

打到SSH keys

git5

到此我們便可以通過gitHub 提供的Web界面來管理我們的倉庫了。

我們發(fā)現(xiàn)通過gitHub管理倉庫實(shí)在是太方便了,可是只能免費(fèi)使用公開倉庫,自已公司的代碼當(dāng)然不能公開了,可是私有倉庫又是需要交“保護(hù)費(fèi)”的,無耐國人還是比較喜歡免費(fèi)的,網(wǎng)絡(luò)界總是有很多雷峰的,比如gitLab!!!

gitLab也是一個(gè)可以通過Web界面管理倉庫的網(wǎng)站程序,我們可以把它架設(shè)到公司自已的服務(wù)器上,實(shí)現(xiàn)倉庫私有化,這也是大部分公司通常采用的方法,其使用方法與gitHub十分相似。

我將閑置電腦配置成了一臺(tái)服務(wù)器,上面架設(shè)了gitLab程序,我們接下來的練習(xí)全部會(huì)在gitLab上進(jìn)行演示。

命令匯總
命令 描述
git config 配置本地倉庫,常用git config --global user.name、git config --global user.email
git config --list 查看配置詳情
git init 初始一個(gè)倉庫,添加--bare可以初始化一個(gè)共享(裸)倉庫
git status 可以查看當(dāng)前倉庫的狀態(tài)
git add“文件” 將工作區(qū)中的文件添加到暫存區(qū)中,其中file可是一個(gè)單獨(dú)的文件,也可以是一個(gè)目錄、“*”、-A
git commit -m '備注信息' 將暫存區(qū)的文件,提交到本地倉庫
git log 可以查看本地倉庫的提交歷史
git branch 查看分支
git branch“分支名稱” 創(chuàng)建一個(gè)新的分支
git checkout“分支名稱” 切換分支
git checkout -b deevelope r 他健并切到developer分支
git merge“分支名稱” 合并分支
git branch -d “分支名稱” 刪除分支
git clone “倉庫地址” 獲取已有倉庫的副本
git push origin “本地分支名稱:遠(yuǎn)程分支名稱” 將本地分支推送至遠(yuǎn)程倉庫,
git push origin hotfix(通常的寫法) 相當(dāng)于git push origin hotfix:hotfix, git push origin hotfix:newfeature

本地倉庫分支名稱和遠(yuǎn)程倉庫分支名稱一樣的情況下可以簡寫成一個(gè),即git push “倉庫地址” “分支名稱”,如果遠(yuǎn)程倉庫沒有對(duì)應(yīng)分支,將會(huì)自動(dòng)創(chuàng)建

git remote add “主機(jī)名稱” “遠(yuǎn)程倉庫地址”添加遠(yuǎn)程主機(jī),即給遠(yuǎn)程主機(jī)起個(gè)別名,方便使用

git remote可以查看已添加的遠(yuǎn)程主機(jī)
git remote show “主機(jī)名稱”可以查看遠(yuǎn)程主機(jī)的信息

GitLab完整演示

沒錯(cuò),Git非常強(qiáng)大!
但是,如果我們的分支不加以規(guī)范管理,也
有可能適得其反!

  • 1、不要有太多的樹杈(子分支)
  • 2、要有一個(gè)“穩(wěn)定分支”,即master分支不要輕意被修改
  • 3、要有一個(gè)開發(fā)分支(developer),保證master分支的穩(wěn)定性
  • 4、所有的功能分支(feature)從developer創(chuàng)建
  • 5、所有功能開發(fā)完成后新建發(fā)布分支(release)


    Git工作流-1.png
Git工作流-2.png
Git工作流-3.png

沖突解決

假如兩個(gè)開發(fā)同時(shí)改到同一文件的同一段內(nèi)容會(huì)發(fā)生什么事情呢?

這時(shí)就會(huì)就會(huì)產(chǎn)生沖突了,當(dāng)沖突產(chǎn)生后,需要開發(fā)者進(jìn)行協(xié)商確認(rèn)沖突的原因,然后將沖突代碼刪除重新提交就可以了。

Git高級(jí)

熟悉掌握以上操作,基本上是可以滿足日常開的需要的,但是在解決一些特殊問題時(shí),就又需要我們能夠掌握更多的命令。

gitignore忽略文件

在項(xiàng)目根目錄下創(chuàng)建一個(gè).gitignore文件,可以將不希望提交的羅列在這個(gè)文件里,如項(xiàng)目的配置文件、node_modules等
https://github.com/github/gitignore

比較差異

當(dāng)內(nèi)容被修改,我們無法確定修改哪些內(nèi)容時(shí),可以通過git diff來進(jìn)行差異比較。
git difftool 比較的是工作區(qū)和暫存的差異
git difftool “SHA”比較與特定提交的差異
git difftool “SHA”``“SHA”比較某兩次提交的差異
git difftool 分支名稱 比較與某個(gè)分支的差異

回滾(撤銷)操作
撤銷.jpg

HEAD 默認(rèn)指向當(dāng)前分支的“末端”,即最后的一次提交,但是我們通過git reset 可以改變HEAD的指向。

  • 1、git reset
    --hard工作區(qū)會(huì)變、歷史(HEAD)會(huì)變, 暫存區(qū)也變
    --soft 只會(huì)變歷史(HEAD)
    --mixed(默認(rèn)是這個(gè)選項(xiàng))歷史(HEAD)會(huì)變、暫存區(qū)也變,工作區(qū)不變
  • 2、git checkout
    git checkout SHA -- "某個(gè)文件",代表只是從SHA這個(gè)版中取出特定的文件,
    git reset是有區(qū)別的,reset重寫了歷史,checkout則沒有。
更新倉庫

在項(xiàng)目開發(fā)過程中,經(jīng)常性的會(huì)遇到遠(yuǎn)程(共享)倉庫和本地倉庫不一致,我們可以通過git fetch 命令來更新本地倉庫,使本地倉庫和遠(yuǎn)程(共享)倉庫保持一致。
git fetch “遠(yuǎn)程主機(jī)”
或者
git fetch “遠(yuǎn)程主機(jī)” “分支名稱”
我們要注意的是,利用git fetch 獲取的更新會(huì)保存在本地倉庫中,但是并沒有體現(xiàn)到我們的工作目錄中,需要我們?cè)俅卫?code>git merge來將對(duì)應(yīng)的分支合并(融合)到特定分支。如下
git pull origin 某個(gè)分支, 上操作相當(dāng)于下面兩步
git fetch
git merge origin/某個(gè)分支
問題:如何查看遠(yuǎn)程主機(jī)上總共有多少個(gè)分支?
git branch -a便可以查看所有(本地+遠(yuǎn)程倉庫)分支了

gi

刪除遠(yuǎn)程分支git push origin --delete 分支名稱
刪除遠(yuǎn)程分支git push origin :分支名稱

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. 安裝 Github 查看是否安裝git: $ git config --global user.name "...
    Albert_Sun閱讀 13,864評(píng)論 9 163
  • Git是目前最流行的版本管理系統(tǒng),也是最先進(jìn)的分布式版本控制系統(tǒng)(distributed version cont...
    pro648閱讀 5,998評(píng)論 1 17
  • 可能是欣賞,欣賞你出眾的才華與氣質(zhì), 所以心生崇敬 ,樂于深交。很喜歡和你在一起時(shí)的感覺,雖然現(xiàn)在時(shí)不時(shí)的就會(huì)冷...
    夏味微閱讀 281評(píng)論 0 0
  • 朱梅對(duì)望云霞暖 鴛鴦依語水中天 最是夕陽魂追處 疏影踏波長歌傳
    滴答清脆閱讀 613評(píng)論 0 1
  • 朋友問我,她那是臥蠶還是眼袋,看后發(fā)現(xiàn),兩者皆有,且眼袋上還帶黑眼圈,實(shí)在不雅觀,那怎么辦呢?先看一下什么是臥...
    胡蝶FS閱讀 889評(píng)論 0 7

友情鏈接更多精彩內(nèi)容