Git第二天
對(duì)稱(chēng)加密
在密碼學(xué)中,加密是將明文信息隱匿起來(lái),使之在缺少特殊信息時(shí)不可讀。加密,是以某種特殊的算法改變?cè)械男畔?shù)據(jù),使得未授權(quán)的用戶(hù)即使獲得了已加密的信息,但因不知解密的方法,仍然無(wú)法了解信息的內(nèi)容。下面是對(duì)稱(chēng)加密的示例圖:采用單鑰密碼系統(tǒng)的加密方法,同一個(gè)密鑰可以同時(shí)用作信息的加密和解密,這種加密方法稱(chēng)為對(duì)稱(chēng)加密,也稱(chēng)為單密鑰加密。所謂對(duì)稱(chēng),就是采用這種加密方法的雙方使用方式用同樣的密鑰進(jìn)行加密和解密。密鑰是控制加密及解密過(guò)程的指令。算法是一組規(guī)則,規(guī)定如何進(jìn)行加密和解密。在對(duì)稱(chēng)加密算法中常用的算法有:DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK、AES等。對(duì)稱(chēng)加密算法的優(yōu)點(diǎn)是算法公開(kāi)、計(jì)算量小、加密速度快、加密效率高。對(duì)稱(chēng)加密算法的缺點(diǎn)是在數(shù)據(jù)傳送前,發(fā)送方和接收方必須商定好秘鑰,然后使雙方都能保存好秘鑰。其次如果一方的秘鑰被泄露,那么加密信息也就不安全了。另外,每對(duì)用戶(hù)每次使用對(duì)稱(chēng)加密算法時(shí),都需要使用其他人不知道的唯一秘鑰,這會(huì)使得收、發(fā)雙方所擁有的鑰匙數(shù)量巨大,密鑰管理成為雙方的負(fù)擔(dān).對(duì)稱(chēng)加密舉個(gè)例子:比如現(xiàn)實(shí)生活中,甲公司從乙公司定的貨物,通常采用貨柜車(chē)來(lái)送,為了保證貨物的安全,貨柜車(chē)的鑰匙由甲公司老板和乙公司老板保管,當(dāng)貨柜車(chē)到達(dá)以后就可以用這個(gè)鑰匙打開(kāi),當(dāng)送貨物的時(shí)候就可以將貨柜車(chē)鎖上.

MD5加密
MD5算法具有以下特點(diǎn):
壓縮性:任意長(zhǎng)度的數(shù)據(jù),算出的MD5值長(zhǎng)度都是固定的。
容易計(jì)算:從原數(shù)據(jù)計(jì)算出MD5值很容易。
抗修改性:對(duì)原數(shù)據(jù)進(jìn)行任何改動(dòng),哪怕只修改1個(gè)字節(jié),所得到的MD5值都有很大區(qū)別。
強(qiáng)抗碰撞:已知原數(shù)據(jù)和其MD5值,想找到一個(gè)具有相同MD5值的數(shù)據(jù)(即偽造數(shù)據(jù))是非常困難的。
非對(duì)稱(chēng)加密
非對(duì)稱(chēng)加密算法需要兩個(gè)密鑰來(lái)進(jìn)行加密和解密,這兩個(gè)秘鑰是公開(kāi)密鑰(public key,簡(jiǎn)稱(chēng)公鑰)和私有密鑰(private key,簡(jiǎn)稱(chēng)私鑰)。非對(duì)稱(chēng)加密算法需要兩個(gè)密鑰:公開(kāi)密鑰(publickey)和私有密鑰(privatekey)。公開(kāi)密鑰與私有密鑰是一對(duì),如果用公開(kāi)密鑰對(duì)數(shù)據(jù)進(jìn)行加密,只有用對(duì)應(yīng)的私有密鑰才能解密;如果用私有密鑰對(duì)數(shù)據(jù)進(jìn)行加密,那么只有用對(duì)應(yīng)的公開(kāi)密鑰才能解密。因?yàn)榧用芎徒饷苁褂玫氖莾蓚€(gè)不同的密鑰,所以這種算法叫作非對(duì)稱(chēng)加密算法。下面是非對(duì)稱(chēng)加密的示例圖:如圖所示加密過(guò)程:

乙方生成一對(duì)密鑰(公鑰和私鑰)并將公鑰向其它方公開(kāi)。
得到該公鑰的甲方使用該密鑰對(duì)機(jī)密信息進(jìn)行加密后再發(fā)送給乙方。
乙方再用自己保存的另一把專(zhuān)用密鑰(私鑰)對(duì)加密后的信息進(jìn)行解密。乙方只能用其專(zhuān)用密鑰(私鑰)解密由對(duì)應(yīng)的公鑰加密后的信息。在傳輸過(guò)程中,即使攻擊者截獲了傳輸?shù)拿芪模⒌玫搅艘业墓€,也無(wú)法破解密文,因?yàn)橹挥幸业乃借€才能解密密文。同樣,如果乙要回復(fù)加密信息給甲,那么需要甲先公布甲的公鑰給乙用于加密,甲自己保存甲的私鑰用于解密。在非對(duì)稱(chēng)加密中使用的主要算法有:RSA、Elgamal、背包算法、Rabin、D-H、ECC(橢圓曲線(xiàn)加密算法)等。非對(duì)稱(chēng)加密與對(duì)稱(chēng)加密相比,其安全性更好:對(duì)稱(chēng)加密的通信雙方使用相同的秘鑰,如果一方的秘鑰遭泄露,那么整個(gè)通信就會(huì)被破解。而非對(duì)稱(chēng)加密使用一對(duì)秘鑰,一個(gè)用來(lái)加密,一個(gè)用來(lái)解密,而且公鑰是公開(kāi)的,秘鑰是自己保存的,不需要像對(duì)稱(chēng)加密那樣在通信之前要先同步秘鑰。非對(duì)稱(chēng)加密的缺點(diǎn)是加密和解密花費(fèi)時(shí)間長(zhǎng)、速度慢,只適合對(duì)少量數(shù)據(jù)進(jìn)行加密。
SSH免密碼登錄原理
客戶(hù)端生成公鑰和私鑰,并和服務(wù)端建立連接,將公鑰發(fā)送給服務(wù)端;
客戶(hù)端請(qǐng)求連接,服務(wù)端生成一段隨機(jī)的字符串,將該字符串用客戶(hù)端的公鑰加密后和服務(wù)端自己的公鑰發(fā)送給客戶(hù)端;
客戶(hù)端用自己的私鑰解密該字符串,并使用服務(wù)端的公鑰加密后,發(fā)送給服務(wù)端;
服務(wù)端使用自己的私鑰解密該字符串,和生成的隨機(jī)字符串對(duì)比,如果相同則連接建立.示例圖如下:

本地生成公鑰私鑰命令
生成 公鑰/私鑰: ssh-keygen -t rsa
github創(chuàng)建倉(cāng)庫(kù)步驟
生成公鑰和私鑰

登錄github帳號(hào)添加本地公鑰





創(chuàng)建倉(cāng)庫(kù)


克隆地址




代碼托管平臺(tái)
GitHub
> GitHub的地址: https://github.com/
GitLab
> Gitlab支持無(wú)限的公有項(xiàng)目和私有項(xiàng)目。Gitlab地址:https://about.gitlab.com/
Bitbucket
> bitbucket 免費(fèi)支持5個(gè)開(kāi)發(fā)成員的團(tuán)隊(duì)創(chuàng)建無(wú)限私有代碼托管庫(kù) 。bitbucket地址:https://bitbucket.org/
(推薦)開(kāi)源中國(guó)代碼托管 碼云
> 開(kāi)源中國(guó)一個(gè)賬號(hào)最多可以創(chuàng)建1000個(gè)項(xiàng)目,包含公有和私有,開(kāi)源中國(guó)代碼托管地址:http://git.oschina.net/
> 開(kāi)源中國(guó)在幾個(gè)月前又發(fā)布了團(tuán)隊(duì)協(xié)作開(kāi)發(fā)平臺(tái),和代碼托管平臺(tái)一起,打造了一個(gè)十分好的團(tuán)隊(duì)開(kāi)發(fā)平臺(tái),開(kāi)源中國(guó)團(tuán)隊(duì)協(xié)作平臺(tái)地址:http://team.oschina.net/,團(tuán)隊(duì)協(xié)作平臺(tái)支持任務(wù)的創(chuàng)建、討論、便簽等.
(推薦)coding.net 碼市
> 談到coding.net,首先必須提的是速度快,功能與開(kāi)源中國(guó)相似,同樣一個(gè)賬號(hào)最多可以創(chuàng)建1000個(gè)項(xiàng)目,也支持任務(wù)的創(chuàng)建等。coding.net地址:https://coding.net/home.html.
CSDN代碼托管
> CSDN代碼托管地址:https://code.csdn.net/
Git忽略文件
在開(kāi)發(fā)中,有些時(shí)候,我們必須把某些文件存放在Git的工作目錄中,但是又不能提交它們,比如說(shuō)保存了數(shù)據(jù)庫(kù)密碼的配置文件啦,等等,每次git status都會(huì)顯示Untracked files ...;Git提供了針對(duì)這種情況的解決方案就是在Git工作區(qū)的根目錄下創(chuàng)建一個(gè)特殊的.gitignore文件,然后把需要忽略的文件名填進(jìn)去,Git就會(huì)自動(dòng)忽略這些文件.不需要從頭寫(xiě).gitignore文件,GitHub已經(jīng)我們準(zhǔn)備了各種配置文件,只需要組合一下就可以使用了,所有的配置文件可以直接在線(xiàn)瀏覽:https://github.com/github/gitignore下面是詳細(xì)示例:
首先在webStorm中打開(kāi)testDemo這個(gè)項(xiàng)目,在index.html新增代碼;?

在命令行查看當(dāng)前項(xiàng)目的狀態(tài),發(fā)現(xiàn)多出來(lái).idea文件夾下面一系列文件,先不理會(huì)它們,全部提交到GitHub;? ? ?



繼續(xù)修改index.html文件,查看Git狀態(tài),發(fā)現(xiàn).idea/workspace.xm龍文件發(fā)生變化,是因?yàn)樵谶@個(gè)文件里面記錄了webStrom相關(guān)的一些狀態(tài),每次修改項(xiàng)目,都會(huì)發(fā)生相應(yīng)的改變,繼續(xù)提交到遠(yuǎn)程的GitHub;



.idea文件夾下面的文件都不需要提交,所以我們?cè)谔峤坏臅r(shí)候要忽略掉它,在項(xiàng)目的根目錄創(chuàng)建.gitignore文件,注意:圖形化界面不能創(chuàng)建該文件,


.gitignore文件的忽略規(guī)則:
node_modules/? 代表node_modules下的所有文件都不提交
node_modules/*.jpg? 代表node_modules/123.jpg圖片不提交但是node_modules/coderYDH/456.jpg可以提交
.idea/*? 代表 .idea 下的所有文件都不提交
*.png? 代表忽略所有的 .png 結(jié)尾的文件
!xxoo.png? 代表排除 xxoo.png

創(chuàng)建規(guī)則,提交.gitignore文件后,再次修改index.html文件,發(fā)現(xiàn)該忽略的還是沒(méi)有忽略:


這里主要是因?yàn)?gitignore只能忽略那些原來(lái)沒(méi)有被track的文件,如果某些文件已經(jīng)被納入到了版本管理中,修改.gitignore文件無(wú)效,解決方案就是先把本地緩存刪除(改變成未track狀態(tài)),然后再提交.




有關(guān)遠(yuǎn)程操作分支的命令:
創(chuàng)建本地分支: git branch test將本地分支推送到遠(yuǎn)程分支: git push origin test刪除本地分支: git branch -r -d origin/branch-name刪除遠(yuǎn)程分支: git push origin --delete test
有關(guān)遠(yuǎn)程操作倉(cāng)庫(kù)的命令
查看遠(yuǎn)程倉(cāng)庫(kù)地址,默認(rèn)是origin: git remote -v 添加一個(gè)遠(yuǎn)程倉(cāng)庫(kù): git remote add 倉(cāng)庫(kù)名稱(chēng)/倉(cāng)庫(kù)地址 修改遠(yuǎn)程倉(cāng)庫(kù)地址:
1.直接修改? git remote origin set-url [url]2.先刪除后增加? git remote rm origin
? git remote add origin [url]
創(chuàng)建遠(yuǎn)程分支,刪除遠(yuǎn)程分支示例
在本地創(chuàng)建新分支;

在本地新分支上創(chuàng)建login.html


將本地分支提交到遠(yuǎn)程倉(cāng)庫(kù),首先使用命令:git remote -v查看遠(yuǎn)程倉(cāng)庫(kù)的名稱(chēng),默認(rèn)為origin,接著提交本地分支到遠(yuǎn)程倉(cāng)庫(kù)




在GitHub使用圖形化界面來(lái)合并遠(yuǎn)程分支




將login文件合并到master分支并刪除本地分支和遠(yuǎn)程分支



Git-Tag(標(biāo)簽)主要命令
標(biāo)簽(Tag)可以針對(duì)某一時(shí)間點(diǎn)的版本做標(biāo)記,常用于版本發(fā)布切換標(biāo)簽: git checkout [tagname] 用git show命令可以查看標(biāo)簽的版本信息:git show 標(biāo)簽名稱(chēng)給指定的commit打標(biāo)簽:? git tag -a v0.1.1 9fbc3d0將v0.1.2標(biāo)簽提交到git服務(wù)器:? git push origin v0.1.2 將本地所有標(biāo)簽一次性提交到git服務(wù)器: git push origin –-tags刪除遠(yuǎn)程tag: git push :refs/tags/v0.1.2
Git-Tag版本發(fā)布示例
修改登錄界面

提交到遠(yuǎn)程倉(cāng)庫(kù),并將它作為V1.0版本




將本地標(biāo)簽提交到遠(yuǎn)程服務(wù)器


刪除本地標(biāo)簽和遠(yuǎn)程標(biāo)簽



多人合作開(kāi)發(fā)創(chuàng)建團(tuán)隊(duì)





多人合作開(kāi)發(fā)團(tuán)隊(duì)創(chuàng)建項(xiàng)目




多人合作開(kāi)發(fā)項(xiàng)目示例
在A(yíng)用戶(hù)下創(chuàng)建index.html文件,并提交


由于當(dāng)前組織下只有A用戶(hù),所以需要邀請(qǐng)另一個(gè)用戶(hù)加入組織來(lái)共同開(kāi)發(fā)項(xiàng)目1) 首先進(jìn)入組織2) 邀請(qǐng)3) 可以采用GitHub名字或這B用戶(hù)注冊(cè)GitHub郵箱來(lái)邀請(qǐng)B用戶(hù)的郵箱會(huì)收到類(lèi)似以下圖片的一封郵件B用戶(hù)點(diǎn)擊加入A用戶(hù)修改index.html文件,并提交到遠(yuǎn)程倉(cāng)庫(kù)B用戶(hù)克隆代碼,并修改代碼提交遠(yuǎn)程倉(cāng)庫(kù)這個(gè)是由于B用戶(hù)沒(méi)有權(quán)限所導(dǎo)致的,所以需要這個(gè)組織的所有者A用戶(hù)來(lái)開(kāi)通權(quán)限B用戶(hù)提交代碼完成
































webStorm圖形化界面使用Git










OSChina提交代碼示例
OSChina是國(guó)內(nèi)類(lèi)似于GitHub的代碼托管平臺(tái)去C:\Users\YDH.ssh這個(gè)目錄下找到公鑰,放到OSChina上







