網(wǎng)站圖片鏈接是怎么做的百度關(guān)鍵詞排名技術(shù)
一、版本控制
1.1 什么是版本控制
????????版本控制(Revision control)是一種在開發(fā)的過程中用于管理我們對(duì)文件、目錄或工程等內(nèi)容的修改歷史,方便查看更改歷史記錄,備份以便恢復(fù)以前的版本的軟件工程技術(shù)。簡(jiǎn)單說就是用于管理多人協(xié)同開發(fā)項(xiàng)目的技術(shù)。優(yōu)點(diǎn)是:
? ? ? ? a、實(shí)現(xiàn)跨區(qū)域多人協(xié)同開發(fā)
? ? ? ? b、追蹤和記載一個(gè)或者多個(gè)文件的歷史記錄
? ? ? ? c、組織和保護(hù)你的源代碼和文檔
? ? ? ? d、統(tǒng)計(jì)工作量
? ? ? ? e、并行開發(fā)、提高開發(fā)效率
? ? ? ? f、跟蹤記錄整個(gè)軟件的開發(fā)過程
? ? ? ? g、減輕開發(fā)人員的負(fù)擔(dān),節(jié)省時(shí)間,同時(shí)降低人為錯(cuò)誤
????????沒有進(jìn)行版本控制或者版本控制本身缺乏正確的流程管理,在軟件開發(fā)過程中將會(huì)引入很多問題,如軟件代碼的一致性、軟件內(nèi)容的冗余、軟件過程的事物性、軟件開發(fā)過程中的并發(fā)性、軟件源代碼的安全性,以及軟件的整合等問題。
????????無論是工作還是學(xué)習(xí),或者是自己做筆記,都經(jīng)歷過這樣一個(gè)階段!我們就迫切需要一個(gè)版本控制工具!
1.2 常見的版本控制工具
????????主流的版本控制器有如下這些:
? ? ? ? a、Git
? ? ? ? b、SVN(Subversion)
? ? ? ? c、CVS(Concurrent Versions System)
? ? ? ? d、VSS(Micorosoft Visual SourceSafe)
? ? ? ? e、TFS(Team Foundation Server)
? ? ? ? f、Visual Studio Online
????????版本控制產(chǎn)品非常的多(Perforce、Rational ClearCase、RCS(GNU Revision Control System)、Serena Dimention、SVK、BitKeeper、Monotone、Bazaar、Mercurial、SourceGear Vault),現(xiàn)在影響力最大且使用最廣泛的是 Git 與 SVN 。
1.3 版本控制分類
1.3.1 本地版本控制
????????記錄文件每次的更新,可以對(duì)每個(gè)版本做一個(gè)快照,或是記錄補(bǔ)丁文件,適合個(gè)人用,如RCS?。
1.3.2 集中版本控制 SVN
????????所有的版本數(shù)據(jù)都保存在服務(wù)器上,協(xié)同開發(fā)者從服務(wù)器上同步更新或上傳自己的修改。
????????所有的版本數(shù)據(jù)都存在服務(wù)器上,用戶的本地只有自己以前所同步的版本,如果不連網(wǎng)的話,用戶就看不到歷史版本,也無法切換版本驗(yàn)證問題,或在不同分支工作。而且,所有數(shù)據(jù)都保存在單一的服務(wù)器上,有很大的風(fēng)險(xiǎn)這個(gè)服務(wù)器會(huì)損壞,這樣就會(huì)丟失所有的數(shù)據(jù),當(dāng)然可以定期備份。代表產(chǎn)品:SVN、CVS、VSS??
1.3.3 分布式版本控制 Git
????????每個(gè)人都擁有全部的代碼!安全隱患!但不會(huì)因?yàn)榉?wù)器損壞或者網(wǎng)絡(luò)問題,造成不能工作的情況。
????????所有版本信息倉(cāng)庫(kù)全部同步到本地的每個(gè)用戶,這樣就可以在本地查看所有版本歷史,可以離線在本地提交,只需在連網(wǎng)時(shí) push 到相應(yīng)的服務(wù)器或其他用戶那里。由于每個(gè)用戶那里保存的都是所有的版本數(shù)據(jù),只要有一個(gè)用戶的設(shè)備沒有問題就可以恢復(fù)所有的數(shù)據(jù),但這增加了本地存儲(chǔ)空間的占用。
1.4 Git 與 SVN?的主要區(qū)別
????????SVN 是集中式版本控制系統(tǒng),版本庫(kù)是集中放在中央服務(wù)器的,而工作的時(shí)候,用的都是自己的電腦,所以首先要從中央服務(wù)器得到最新的版本,然后工作,完成工作后,需要把自己做完的活推送到中央服務(wù)器。集中式版本控制系統(tǒng)是必須聯(lián)網(wǎng)才能工作,對(duì)網(wǎng)絡(luò)帶寬要求較高。
????????Git 是分布式版本控制系統(tǒng),沒有中央服務(wù)器,每個(gè)人的電腦就是一個(gè)完整的版本庫(kù),工作的時(shí)候不需要聯(lián)網(wǎng)了,因?yàn)榘姹径荚谧约弘娔X上。協(xié)同的方法是這樣的:比如說自己在電腦上改了文件 A,其他人也在電腦上改了文件 A,這時(shí),你們兩之間只需把各自的修改推送給對(duì)方,就可以互相看到對(duì)方的修改了。Git 可以直接看到更新了哪些代碼和文件。
????????Git是目前世界上最先進(jìn)的分布式版本控制系統(tǒng)
二、Git 歷史
????????同生活中的許多偉大事物一樣,Git 誕生于一個(gè)極富紛爭(zhēng)大舉創(chuàng)新的年代。
????????Linux 內(nèi)核開源項(xiàng)目有著為數(shù)眾廣的參與者。絕大多數(shù)的 Linux 內(nèi)核維護(hù)工作都花在了提交補(bǔ)丁和保存歸檔的繁瑣事務(wù)上(1991-2002 年間)。到 2002 年,整個(gè)項(xiàng)目組開始啟用一個(gè)專有的分布式版本控制系統(tǒng) BitKeeper 來管理和維護(hù)代碼。
? ? ? ? 但 Linux 社區(qū)中存在很多的大佬!破解研究 BitKeeper 。
????????到了 2005 年,開發(fā) BitKeeper 的商業(yè)公司同 Linux 內(nèi)核開源社區(qū)的合作關(guān)系結(jié)束,他們收回了 Linux 內(nèi)核社區(qū)免費(fèi)使用 BitKeeper 的權(quán)力。這就迫使 Linux 開源社區(qū)(特別是 Linux 的締造者 Linus Torvalds)基于使用 BitKeeper 時(shí)的經(jīng)驗(yàn)教訓(xùn),開發(fā)出自己的版本系統(tǒng)。(2周左右!) 也就是后來的 Git 。
????????Git 是免費(fèi)、開源的,最初 Git 是為輔助 Linux 內(nèi)核開發(fā)的,來替代 BitKeeper。
三、Git 環(huán)境配置
3.1 下載和安裝
????????打開 git 官網(wǎng),下載對(duì)應(yīng)操作系統(tǒng)的版本即可,安裝之后無腦下一步即可。
3.2 啟動(dòng)
????????安裝成功后在開始菜單中會(huì)有 Git 項(xiàng),菜單下有 3 個(gè)程序:任意文件夾下右鍵也可以看到對(duì)應(yīng)的程序。
????????Git Bash:Unix 與 Linux 風(fēng)格的命令行,使用最多,推薦最多
????????Git CMD:Windows 風(fēng)格的命令行
????????Git GUI:圖形界面的 Git,不建議初學(xué)者使用,盡量先熟悉常用命令
3.3 常用的 Linux 命令
cd # 改變目錄cd .. # 回退到上一個(gè)目錄,直接 cd 進(jìn)入默認(rèn)目錄pwd # 顯示當(dāng)前所在的目錄路徑。ls(ll) # 都是列出當(dāng)前目錄中的所有文件,只不過 ll 列出的內(nèi)容更為詳細(xì)。touch # 新建一個(gè)文件 如 touch index.js 就會(huì)在當(dāng)前目錄下新建一個(gè) index.js 文件。rm # 刪除一個(gè)文件, rm index.js 就會(huì)把 index.js 文件刪除。mkdir # 新建一個(gè)目錄,就是新建一個(gè)文件夾。rm -r # 刪除一個(gè)文件夾, rm -r src 刪除 src 目錄rm -rf / # 切勿在 Linux 中嘗試!刪除電腦中全部文件!mv # 移動(dòng)文件, mv index.html src index.html 是我們要移動(dòng)的文件, src 是目標(biāo)文件夾,當(dāng)然, 這樣寫,必須保證文件和目標(biāo)文件夾在同一目錄下。reset # 重新初始化終端/清屏。clear # 清屏。history # 查看命令歷史。help # 幫助。exit # 退出。# # 表示注釋
3.4 Git 配置
3.4.1 設(shè)置用戶名和郵箱
????????當(dāng)你安裝 Git 后首先要做的事情是設(shè)置你的 name 和 email 地址。這是非常重要的,因?yàn)槊看?Git 提交都會(huì)使用該信息。它被永遠(yuǎn)的嵌入到了你的提交中,命令如下所示:
git config --global user.name "xiehongfa" # 名稱
git config --global user.email "1982392926@qq.com" # 郵箱
????????只需要做一次這個(gè)設(shè)置,因?yàn)槟銈鬟f了 --global 選項(xiàng),Git 將總是會(huì)使用該信息來處理你在系統(tǒng)中所做的一切操作。如果你希望在一個(gè)特定的項(xiàng)目中使用不同的 name 或 email 地址,你可以在該項(xiàng)目中運(yùn)行該命令而不要 --global 選項(xiàng)。總之 --global 為全局配置,不加為某個(gè)項(xiàng)目的特定配置。?
3.4.2 查看配置信息
????????打開 Git Bash,輸入命令,內(nèi)容如下:
????????查看不同級(jí)別的配置文件:?
# 查看系統(tǒng) config
git config --system --list# 查看當(dāng)前用戶(global)配置
git config --global --list
3.4.3 修改配置信息
? ? ? ? 可以在這里直接編輯配置文件,剛才我們通過輸入命令設(shè)置的參數(shù)最終也是存儲(chǔ)在這里。
四、 Git 理論基礎(chǔ)
4.1 三個(gè)區(qū)域
????????Git 本地有三個(gè)工作區(qū)域:工作目錄(Working Directory)、暫存區(qū) (Stage/Index)、資源庫(kù) (Repository 或 Git Directory)。如果再加上遠(yuǎn)程的 git 倉(cāng)庫(kù) (Remote Directory) 就可以分為四個(gè)工作區(qū)域。文件在這四個(gè)區(qū)域之間的轉(zhuǎn)換關(guān)系如下:
????????Workspace:工作區(qū),就是你平時(shí)存放項(xiàng)目代碼的地方。
????????Index / Stage:暫存區(qū),用于臨時(shí)存放你的改動(dòng),事實(shí)上它只是一個(gè)文件,保存即將提交到文件列表信息。
????????Repository:倉(cāng)庫(kù)區(qū)(或本地倉(cāng)庫(kù)),就是安全存放數(shù)據(jù)的位置,這里面有你提交到所有版本的數(shù)據(jù)。其中 HEAD 指向最新放入倉(cāng)庫(kù)的版本。
????????Remote:遠(yuǎn)程倉(cāng)庫(kù),托管代碼的服務(wù)器,可以簡(jiǎn)單的認(rèn)為是你項(xiàng)目組中的一臺(tái)電腦用于遠(yuǎn)程數(shù)據(jù)交換。
4.2 工作流程
????????git 的工作流程一般是這樣的:
????????1、在工作目錄中添加、修改文件;
????????2、將需要進(jìn)行版本管理的文件放入暫存區(qū)域;
????????3、將暫存區(qū)域的文件提交到 git 倉(cāng)庫(kù)。
????????因此,git 管理的文件有三種狀態(tài):已修改(modified),已暫存(staged),已提交(committed)
五、 Git 項(xiàng)目搭建
5.1 創(chuàng)建工作目錄與常用指令
????????工作目錄(WorkSpace) 一般就是你希望 Git 幫助你管理的文件夾,可以是你項(xiàng)目的目錄,也可以是一個(gè)空目錄,建議不要有中文。
????????日常使用只要記住下圖 6 個(gè)命令:
5.2 本地倉(cāng)庫(kù)搭建
????????創(chuàng)建本地倉(cāng)庫(kù)的方法有兩種:一種是創(chuàng)建全新的倉(cāng)庫(kù),另一種是克隆遠(yuǎn)程倉(cāng)庫(kù)。
5.2.1 創(chuàng)建新的倉(cāng)庫(kù)
????????創(chuàng)建全新的倉(cāng)庫(kù),需要用 Git?管理的項(xiàng)目的根目錄執(zhí)行:
# 在當(dāng)前目錄新建一個(gè) Git 代碼庫(kù)
git init
5.2.2 克隆遠(yuǎn)程倉(cāng)庫(kù)
? ? ? ? 它是將遠(yuǎn)程服務(wù)器上的倉(cāng)庫(kù)完全鏡像一份至本地
# eg: git clone https://gitee.com/kuangstudy/openclass.gitgit clone url
六、Git 文件操作
6.1 文件的四種狀態(tài)
????????版本控制就是對(duì)文件的版本控制,要對(duì)文件進(jìn)行修改、提交等操作,首先要知道文件當(dāng)前在什么狀態(tài),不然可能會(huì)提交了現(xiàn)在還不想提交的文件,或者要提交的文件沒提交上。
????????Untracked:未跟蹤,此文件在文件夾中,但并沒有加入到 git 庫(kù),不參與版本控制。 通過 git add 狀態(tài)變?yōu)?Staged。
????????Unmodify:文件已經(jīng)入庫(kù),未修改,即版本庫(kù)中的文件快照內(nèi)容與文件夾中完全一致。 這種類型的文件有兩種去處,如果它被修改,而變?yōu)?Modified。 如果使用 git rm 移出版本庫(kù), 則成為 Untracked 文件。
????????Modified:文件已修改,僅僅是修改,并沒有進(jìn)行其他的操作。 這個(gè)文件也有兩個(gè)去處,通過 git add 可進(jìn)入暫存 staged 狀態(tài),使用 git checkout 則丟棄修改過,返回到 unmodify 狀態(tài), 這個(gè) git checkout 即從庫(kù)中取出文件, 覆蓋當(dāng)前修改。
????????Staged:暫存狀態(tài),執(zhí)行 git commit 則將修改同步到庫(kù)中,這時(shí)庫(kù)中的文件和本地文件又變?yōu)橐恢?#xff0c;文件為?Unmodify?狀態(tài)。 執(zhí)行 git reset HEAD filename 取消暫存,文件狀態(tài)為 Modified。
6.2 查看文件狀態(tài)
????????上面說文件有4種狀態(tài),通過如下命令可以查看到文件的狀態(tài)
# 查看指定文件狀態(tài)
git status [filename]# 查看所有文件狀態(tài)
git status# 添加所有文件到暫存區(qū)
git add .# 提交暫存區(qū)中的內(nèi)容到本地倉(cāng)庫(kù) -m 提交信息
git commit -m "消息內(nèi)容"
6.3 忽略文件
????????有些時(shí)候我們不想把某些文件納入版本控制中,比如數(shù)據(jù)庫(kù)文件,臨時(shí)文件,設(shè)計(jì)文件等。在主目錄下建立 .gitignore 文件,此文件有如下規(guī)則:
? ? ? ? a、忽略文件中的空行或以井號(hào)(#)開始的行將會(huì)被忽略。
? ? ? ? b、可以使用 Linux 通配符。例如:星號(hào)(*)代表任意多個(gè)字符,問號(hào)(?)代表一個(gè)字符,方括號(hào)([abc])代表可選字符范圍,大括號(hào)({string1,string2,...})代表可選的字符串等。
? ? ? ? c、如果名稱的最前面有一個(gè)感嘆號(hào)(!),表示例外規(guī)則,將不被忽略。
? ? ? ? d、如果名稱的最前面是一個(gè)路徑分隔符(/),表示要忽略的文件在此目錄下,而子目錄中的文件不忽略。
? ? ? ? e、如果名稱的最后面是一個(gè)路徑分隔符(/),表示要忽略的是此目錄下該名稱的子目錄,而非文件(默認(rèn)文件或目錄都忽略)。
#為注釋*.txt # 忽略所有 .txt 結(jié)尾的文件,這樣的話上傳就不會(huì)被選中!!lib.txt # 但 lib.txt 除外/temp # 僅忽略項(xiàng)目根目錄下的 TODO 文件,不包括其它目錄 tempbuild/ # 忽略 build/ 目錄下的所有文件doc/*.txt #會(huì)忽略 doc/notes.txt 但不包括 doc/server/arch.txt
七、使用碼云
????????github 是有墻的,比較慢,在國(guó)內(nèi)的話,我們一般使用 gitee ,公司中有時(shí)候會(huì)搭建自己的 gitlab 服務(wù)器
7.1 注冊(cè)碼云
????????注冊(cè)登錄碼云,完善個(gè)人信息
7.2 設(shè)置公鑰
????????設(shè)置本機(jī)綁定 SSH 公鑰,實(shí)現(xiàn)免密碼登錄!(免密碼登錄,這一步挺重要的,碼云是遠(yuǎn)程倉(cāng)庫(kù),我們是平時(shí)工作在本地倉(cāng)庫(kù)!)
# 生成公鑰,-t rsa 的意思是使用 rsa 算法加密
# 在哪個(gè)目錄下執(zhí)行都可以
ssh-keygen -t rsa
7.3?綁定公鑰
????????將公鑰信息 public key 添加到碼云賬戶中即可,如下所示:
7.4 創(chuàng)建倉(cāng)庫(kù)
????????使用碼云創(chuàng)建一個(gè)自己的倉(cāng)庫(kù)
????????許可證:開源是否可以隨意轉(zhuǎn)載,開源但是不能商業(yè)使用,不能轉(zhuǎn)載,... ?限制!?
7.5 克隆項(xiàng)目
????????克隆下來的項(xiàng)目?jī)?nèi)容和遠(yuǎn)程的內(nèi)容是一致的,如下所示:
八、IDEA 中集成 Git
8.1 新建項(xiàng)目綁定 Git
????????使用 idea 新建一個(gè)spring boot 的項(xiàng)目,然后把我們遠(yuǎn)程的 git 文件目錄拷貝到項(xiàng)目中即可,如下所示:
????????注意觀察 idea 中的變化?
8.2 修改文件
? ? ? ? 修改文件,使用 idea 操作 git,