開篇:git的由來
Linus(林納斯)是一個(gè)偉大的黑客,曾就職于美國(guó)加州硅谷的一家科技公司,是Linux系統(tǒng)的創(chuàng)始人,堅(jiān)持開源精神,競(jìng)爭(zhēng)對(duì)手是微軟。
1969年林納斯出生于芬蘭,1982年林納斯的爺爺童奎(芬蘭赫爾辛基大學(xué)的統(tǒng)計(jì)學(xué)教授),為了在家可以完成工作買了一個(gè)早期的電腦,但問題是習(xí)慣了用紙和筆的童奎很不習(xí)慣敲鍵盤,于是他把目光轉(zhuǎn)向了11歲的外孫林納斯,童奎在紙上寫好代碼,有童奎輸入進(jìn)電腦。于是放學(xué)回家?guī)屯夤敵绦虺蔀榱肆旨{斯的“家庭作業(yè)”,很快他敲鍵盤的熟練度超過了外公。久而久之,他覺得僅僅幫外公輸入程序有點(diǎn)無聊,開始試著自己編程,并從此對(duì)變成上癮。熱愛變成的林納斯是個(gè)不折不扣的直男,上中學(xué)時(shí)雖然數(shù)學(xué)成績(jī)超好卻不解風(fēng)情。一直沒明白找他補(bǔ)數(shù)學(xué)的女孩子并讓他幫自己養(yǎng)貓是什么意思。
19歲是他考入了爺爺曾任教的大學(xué),選擇了計(jì)算機(jī)專業(yè),那是計(jì)算機(jī)專業(yè)是個(gè)冷門專業(yè)。當(dāng)時(shí)他深愛的操作系統(tǒng)叫Unix,當(dāng)時(shí)的操作系統(tǒng)功能簡(jiǎn)單,bug叢生,林納斯決心編寫一個(gè)自己的操作系統(tǒng),他在赫爾辛基一家經(jīng)營(yíng)電腦的夫妻店,花了3500美元DIY了一臺(tái)外觀平淡無奇但是性能彪悍的電腦,他付了1200美元,剩下的需要再三年內(nèi)還清。
1991年9月,正在上大二的林納斯將Linux系統(tǒng)0.01版本發(fā)布,源代碼超過1000萬行。Linux系統(tǒng)一出現(xiàn),深受全球黑客的喜愛,經(jīng)過他們的共同努力,1994年3月14日Linux系統(tǒng)1.0版本在赫爾辛基大學(xué)發(fā)布。
相比于當(dāng)時(shí)如日中天的Windows,Linux完全免費(fèi),并具備圖形界面。 鮮明的特色賦予了Linux強(qiáng)大的生命力,使它在Windows開始獨(dú)霸全球操作系統(tǒng)時(shí),仍能撕開一條口子。
而時(shí)至今日:
80%以上的只能手機(jī),均使用基于Linux內(nèi)核的Android系統(tǒng)。
75%的云計(jì)算在Linux系統(tǒng)上運(yùn)行。
沒有Linux系統(tǒng)就沒有現(xiàn)在的Google搜索,淘寶購物,微信,QQ聊天等。
在git之前有很多的版本控制工具例如CVS,和SNV,但林納斯并不喜歡集中式的版本控制工具。雖然那時(shí)有些付費(fèi)的版本控制工具很好用,但不符合林納斯的開源精神(就像瑪麗·居里一樣發(fā)現(xiàn)了鐳這種元素但是并沒有當(dāng)做自己賺錢的工具而是把發(fā)現(xiàn)公布與眾,簡(jiǎn)單的說就是免費(fèi)給別人用),一家出售版本控制系統(tǒng)的公司(BitKeeper)找到了林納斯授權(quán)Linux的開發(fā)者可以免費(fèi)使用,這一消息極大的振奮了Linux的開發(fā)者。要知道再次之前世界各地的開發(fā)者是使用郵件將代碼發(fā)給林納斯,再由林納斯手動(dòng)合并。
但Linux社區(qū)牛人聚集,一些梁山好漢視圖破解這一軟件,引起了BitKeeper公司的強(qiáng)烈不滿,曾威脅要撤銷他們免費(fèi)使用的權(quán)利。小弟煩了事兒,大哥主動(dòng)幫抗,林納斯并沒有像BitKeeper公司道歉而是悶頭花了兩周的時(shí)間自己用C寫了一個(gè)分布式版本控制系統(tǒng),這就是GIT,尤其是2008年,GitHub網(wǎng)站上線了,它為開源項(xiàng)目提供免費(fèi)存儲(chǔ),無數(shù)開源項(xiàng)目開始遷至GitHub。
起步:下載git
git下載地址:
改變git的UI樣式:
找到安裝git的文件夾,進(jìn)去之后,右擊git-bash.exe選擇 以管理員身份運(yùn)行。
接著復(fù)制粘貼如下命令:
git clone https://github.com/xnng/my-git-bash.git
cd my-git-bash
git clone https://gitee.com/xnng/bash.git
cd bash
接下來,安裝字體:
#運(yùn)行完下邊這條命令之后,window電腦會(huì)打開兩個(gè)文件夾,一個(gè)文件夾里有很多.ttf文件
#另一個(gè)文件夾里只有一個(gè),把僅有的這一個(gè)直接拖到另一個(gè)有很多文件的文件夾里
start c://Windows//Fonts && start %cd%/fonts
接下來安裝主題:
cp .minttyrc ~ && cp git-prompt.sh /etc/profile.d
exit
做完上面的操作之后有的電腦會(huì)重啟一下gitbash有的電腦把gitbash關(guān)了之后不再重啟,如果電腦沒有自動(dòng)重啟gitbash只需手動(dòng)打開就可以了。
git指南
創(chuàng)建版本庫:
git init
添加操作:
# 添加操作實(shí)際上是把文件修改添加到暫存區(qū)
# 單獨(dú)添加某個(gè)文件的修改
git add 文件名稱
# 添加所有文件的修改使用的是小寫的點(diǎn)
git add .
提交操作:
# 提交更改,實(shí)際上就是把暫存區(qū)的所有內(nèi)容提交到當(dāng)前分支會(huì)提交所有添加后的文件
git commit -m"本次提交的描述"
查看當(dāng)前倉庫里所有文件的狀態(tài):
git status
查看一個(gè)文件修改了哪一部分:
git diff 文件名
查看提交歷史:
git log
# 要想讓日志變得更漂亮、美觀,可以試試下方代碼
git log --pretty=oneline
回到上一個(gè)版本:
# 上一個(gè)是HEAD^,回到上上一個(gè)是HEAD^^,回退到10個(gè)版本以前HEAD~10
git reset --hard HEAD^
回到某個(gè)特定的版本:
git reset --hard 版本號(hào)
查看所有使用過的命令歷史(日志):
git reflog
工作區(qū):
git倉庫所在的目錄就是工作區(qū)
版本庫:
.git文件夾就是當(dāng)前這個(gè)git倉庫的版本庫,這個(gè)不是工作區(qū);
里邊存了很多東西,其中最重要的是
stage【暫存區(qū)】、git自動(dòng)創(chuàng)建的第一個(gè)分支master【主分支】、以及指向master【主分支】的指針HEAD。
修改了一部分把它添加到了暫存區(qū),但是又對(duì)文件進(jìn)行了一波修改:
# 第一次修改
git add .
# 第二次修改,繼續(xù)添加
git add .
# 統(tǒng)一提交
git commit -m"描述"
撤銷修改:
#讓文件回到最近一次添加或提交時(shí)的樣子
git restore 文件名
撤銷已添加到暫存區(qū)的修改:
# 撤銷單個(gè)
git restore --staged 文件名
# 撤銷多個(gè)
git restore --staged .
刪除文件:
# 手動(dòng)刪除一個(gè)文件之后,git版本庫里依然是有這個(gè)文件的,如果要把git版本庫里的文件也刪除掉,
# 使用git rm命令。比如說我們現(xiàn)在手動(dòng)刪除了一個(gè)叫做demo1.html的文件,接著
git rm demo1.html
# 從版本庫里刪除之后要再進(jìn)行一次提交
git commit -m"描述"
遠(yuǎn)程倉庫
文中的克隆指的是下載:
git之所以叫做分布式版本控制系統(tǒng),同一個(gè)git倉庫,可以分布到不同的電腦上,那么怎么分布呢?最早,肯定只有一臺(tái)機(jī)器有這個(gè)版本庫,別人可以直接把你的這個(gè)版本庫復(fù)制到自己的電腦里,復(fù)制完成之后,每個(gè)人都有了一個(gè)一樣的版本庫,這些分布在不同人不同電腦上的版本庫并沒有主次之分。這樣即使某個(gè)人的電腦壞了文件丟失了,也可以再克隆一遍。假如說我們有一個(gè)git倉庫,別人需要克隆,我們不知道有多少個(gè)人要克隆,也不知道他們什么時(shí)候來克隆這個(gè)版本庫,因此我們就必須保持電腦24小時(shí)開機(jī),而在實(shí)際開發(fā)中我們一般會(huì)把這個(gè)git倉庫放在一臺(tái)服務(wù)器上,這樣無論何時(shí)何地只要有網(wǎng)絡(luò)任何人都可以克隆這個(gè)倉庫。而
github就為我們免費(fèi)提供了一個(gè)可以存儲(chǔ)git倉庫的服務(wù)器,我們只需要注冊(cè)一個(gè)github的賬號(hào)就可以了。怎么注冊(cè)呢?
注冊(cè)github賬號(hào)
github網(wǎng)址: https://github.com/
github是一個(gè)免費(fèi)的代碼托管平臺(tái),用戶范圍遍布全球,我們放在上邊的項(xiàng)目別人可以查看和克隆,別人放在上邊的項(xiàng)目我們也可以查看和克隆,這樣即便是離我們很遙遠(yuǎn)的牛人,我們也可以把他們公開的項(xiàng)目下載下來玩弄一番。
接著創(chuàng)建SSH Key
我們把項(xiàng)目放到github上托管后,其他人也可以看到和下載,為了防止別人修改我們?cè)谶h(yuǎn)程倉庫里的代碼,github使用一種加密認(rèn)證,只有認(rèn)證通過才可以修改遠(yuǎn)程倉庫里代碼。那別人下載我們的代碼到自己的電腦上之后可不可以在他的電腦上修改我們的代碼呢?這個(gè)當(dāng)然可以,我們無法控制,我們能做的是不讓他改我們遠(yuǎn)程倉庫里的代碼
ssh-keygen -t rsa -C "你的郵箱地址"
輸入完成之后不管他提示什么都一路回車,知到不能回車為止,接著把我們生成的SSH Key添加到我們自己的github賬號(hào)里:
# 首先你要知道自己的sshkey是什么
cat ~/.ssh/id_rsa.pub
把返回的一堆密碼復(fù)制一下,填在自己github的設(shè)置里(這個(gè)密碼可以隨意給別人看,除非你做的是機(jī)密工作,那你不能透露給別人)。
添加上去之后我們現(xiàn)在就可以去修改自己賬號(hào)里遠(yuǎn)程倉庫里的代碼了,但是我們得先有個(gè)倉庫,現(xiàn)在我們?cè)?code>github上創(chuàng)建一個(gè)遠(yuǎn)程倉庫。
接著我們找到本地的git倉庫,然后把本地的倉庫和遠(yuǎn)程的倉庫關(guān)聯(lián)起來:
# 在本地
git remote add origin 遠(yuǎn)程倉庫的地址
現(xiàn)在我們把兩個(gè)倉庫關(guān)聯(lián)了起來,但是遠(yuǎn)程倉庫里并沒有我們本地倉庫的代碼,我們需要把本地的代碼推送到遠(yuǎn)程:
# 在本地
git push origin master
推送完成之后,我們會(huì)發(fā)現(xiàn)遠(yuǎn)程里的代碼和我們本地的代碼一模一樣。從現(xiàn)在開始,只要你本地修改代碼并提交之后,就可以推送到遠(yuǎn)程倉庫來更新遠(yuǎn)程倉庫里的內(nèi)容。我們剛才所說的別人無法修改你遠(yuǎn)程倉庫里的代碼指的就是他不能把在他本地上修改的部分推到你的遠(yuǎn)程倉庫。
剛才我們說的是如何本地倉庫關(guān)聯(lián)遠(yuǎn)程倉庫接下來我們來看看如何把遠(yuǎn)程倉庫上看到的代碼克隆到本地:
git clone 倉庫地址