您是否在工作或?qū)W習(xí)中遇到過(guò)這種情況:為了防止文檔丟失或更改錯(cuò)誤,我們常常需要復(fù)制出多個(gè)版本的文檔,例如:
“報(bào)告-v1” “報(bào)告-v2” “報(bào)告-v3” “報(bào)告-確定版” “報(bào)告-最終版” “報(bào)告-究極進(jìn)化版” … 每個(gè)版本都有各自的內(nèi)容,但最終我們只會(huì)使用一個(gè)版本。然而,在此之前的工作卻需要這些不同版本的文檔,因此每次都需要復(fù)制粘貼副本,導(dǎo)致文件數(shù)量不斷增加。文件數(shù)量的增加不是問(wèn)題,問(wèn)題是:隨著版本數(shù)量的不斷增多,您還能記得這些版本各自修改了什么嗎?這種情況不僅限于文檔,我們編寫的項(xiàng)目代碼也面臨同樣的問(wèn)題!
一、版本控制器 為了更方便地管理這些不同版本的文件,版本控制器應(yīng)運(yùn)而生。所謂的版本控制器,是一個(gè)可以記錄文件歷史和發(fā)展過(guò)程的系統(tǒng)。簡(jiǎn)單來(lái)說(shuō),它是一個(gè)可以記錄工程的每一次改動(dòng)和版本迭代的管理系統(tǒng),同時(shí)也便于多人協(xié)同工作。目前最主流的版本控制器就是 git。Git 可以管理電腦上所有格式的文件,例如 doc、excel、dwg、dgn、rvt 等。對(duì)于開(kāi)發(fā)人員來(lái)說(shuō),Git 最重要的功能是幫助管理軟件開(kāi)發(fā)項(xiàng)目中的源代碼文件!
二、Git 簡(jiǎn)史 與生活中的許多偉大事物一樣,Git 誕生于一個(gè)充滿爭(zhēng)議和創(chuàng)新的時(shí)代。
Linux 內(nèi)核開(kāi)源項(xiàng)目擁有眾多參與者。大多數(shù) Linux 內(nèi)核維護(hù)工作都花費(fèi)在提交補(bǔ)丁和保存歸檔的繁瑣事務(wù)上(1991-2002年間)。到 2002 年,整個(gè)項(xiàng)目組開(kāi)始使用一個(gè)專有的分布式版本控制系統(tǒng) BitKeeper 來(lái)管理和維護(hù)代碼。
到了 2005 年,開(kāi)發(fā) BitKeeper 的商業(yè)公司與 Linux 內(nèi)核開(kāi)源社區(qū)的合作關(guān)系結(jié)束,他們收回了 Linux 內(nèi)核社區(qū)免費(fèi)使用 BitKeeper 的權(quán)力。這迫使 Linux 開(kāi)源社區(qū)(特別是 Linux 的創(chuàng)始人 Linus Torvalds)基于使用 BitKeeper 的經(jīng)驗(yàn)教訓(xùn),開(kāi)發(fā)出自己的版本系統(tǒng)。他們?yōu)樾碌南到y(tǒng)制定了若干目標(biāo):
? 速度 ? 簡(jiǎn)單的設(shè)計(jì) ? 對(duì)非線性開(kāi)發(fā)模式的強(qiáng)力支持(允許成千上萬(wàn)個(gè)并行開(kāi)發(fā)的分支) ? 完全分布式 ? 有能力高效管理類似 Linux 內(nèi)核一樣的超大規(guī)模項(xiàng)目(速度和數(shù)據(jù)量)
自 2005 年誕生以來(lái),Git 日臻成熟完善,在高度易用的同時(shí),仍保留著初期設(shè)定的目標(biāo)。它的速度極快,非常適合管理大型項(xiàng)目,并擁有令人難以置信的非線性分支管理系統(tǒng)。
三、安裝 Git
1 yum install git
四、在 gitee/Github 創(chuàng)建項(xiàng)目 注冊(cè)賬號(hào),這個(gè)過(guò)程比較簡(jiǎn)單,可以參考官網(wǎng)的提示,需要進(jìn)行郵箱驗(yàn)證。
創(chuàng)建項(xiàng)目:
登錄成功后,進(jìn)入個(gè)人主頁(yè),點(diǎn)擊右上角的“新建倉(cāng)庫(kù)”按鈕新建倉(cāng)庫(kù)。
然后跳轉(zhuǎn)到新頁(yè)面中,輸入倉(cāng)庫(kù)名稱(注意,名稱不能重復(fù),系統(tǒng)會(huì)自動(dòng)校驗(yàn)。校驗(yàn)過(guò)程可能會(huì)花費(fèi)幾秒鐘)。校驗(yàn)完畢后,根據(jù)提示填寫信息,初始化倉(cāng)庫(kù)后,確認(rèn)創(chuàng)建。
在創(chuàng)建好的項(xiàng)目頁(yè)面中復(fù)制項(xiàng)目的鏈接,以便接下來(lái)進(jìn)行下載。
下載項(xiàng)目到本地:
創(chuàng)建好一個(gè)放置代碼的目錄。
1 git clone [url]
這里的 url 就是剛剛建立好的項(xiàng)目的鏈接。
五、三板斧 1、git add 命令將代碼放到剛才下載好的目錄中
git add [文件名]#添加指定文件git add . #所有未添加的文件
2、git commit 命令提交改動(dòng)到本地
git commit -m "XXX" #添加描述
最后的 “.” 表示當(dāng)前目錄。提交的時(shí)候應(yīng)該注明提交日志,描述改動(dòng)的詳細(xì)內(nèi)容。
3、git push 命令同步到遠(yuǎn)端服務(wù)器上
git push
需要填入用戶名密碼。同步成功后,刷新 github 頁(yè)面就能看到代碼改動(dòng)了。
配置免密碼提交:https://www.php.cn/link/dbb6b4e727f400075c39bd45209c5b1c
六、其他 1、git pull 命令拉取托管平臺(tái)的代碼數(shù)據(jù)到本地文件夾。命令格式:
git pull
2、git log 命令命令格式:
git log# 查看所有提交過(guò)的版本的詳細(xì)信息 git log --pretty=oneline# 只顯示版本號(hào)和提交時(shí)的備注信息
3、git reflog 命令命令格式:
git reflog# 可以查看所有分支的所有操作記錄(包括已經(jīng)被刪除的commit記錄和reset的操作)
4、git stash 命令該命令主要用于解決文件沖突。命令格式:
git stash# 保存當(dāng)前工作進(jìn)度,會(huì)把暫存區(qū)和工作區(qū)的改動(dòng)保存起來(lái)
七、.ignore 文件 1、為什么使用 .gitignore ? 在一些項(xiàng)目中,我們不想讓本地倉(cāng)庫(kù)的所有文件都上傳到遠(yuǎn)程倉(cāng)庫(kù)中,而是有選擇的上傳,比如:一些依賴文件(node_modules下的依賴)、bin 目錄下的文件、測(cè)試文件等。一方面將一些依賴、測(cè)試文件都上傳到遠(yuǎn)程傳輸量很大,另一方面,一些文件對(duì)于你這邊是可用的,在另一個(gè)人那里可能就不可用了,比如:本地配置文件。
為了解決上述問(wèn)題,git 引入了 .gitignore 文件,使用該文件來(lái)選擇性的上傳文件。
2、如何創(chuàng)建.gitignore 進(jìn)入項(xiàng)目的目錄下,點(diǎn)擊右鍵單擊【git bash】
在命令行下輸入【touch .gitignore】創(chuàng)建文件
$ touch .gitignore
創(chuàng)建成功
3、.gitignore 的用法簡(jiǎn)介 Git 忽略規(guī)則:
#?????#注釋,內(nèi)容被 Git 忽略.sample # 忽略所有 .sample 結(jié)尾的文件!lib.sample # 但 lib.sample 除外/TODO # 僅僅忽略項(xiàng)目根目錄下的 TODO 文件,不包括 subdir/TODObuild/ # 忽略 build/ 目錄下的所有文件doc/.txt # 會(huì)忽略 doc/notes.txt 但不包括 doc/server/arch.txt[]?????# 匹配字符列,如 [Ll]ibrary 意為L(zhǎng)ibrary或library均滿足條件
如果沒(méi)有特殊要求,也可以使用官方版本的 .gitignore 配置,通常初始化倉(cāng)庫(kù)會(huì)自動(dòng)生成,若無(wú)請(qǐng)自行搜尋。
八、Git 小總結(jié)