Git 30分鐘簡明教程

Git簡介

Git是什么?

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

Git的誕生

參考鏈接

1991年尸闸,Linus創(chuàng)建了開源的Linux,世界各地的志愿者為Linux編寫代碼孕锄,但是絕大多數(shù)的內(nèi)核維護工作吮廉,都花費在提交補丁和保存檔案的繁瑣事務(wù)上。這期間所有的源代碼畸肆,都由Linus手工合并宦芦。Linus堅定反對CVS和SVN,因為這些集中式的版本控制系統(tǒng)轴脐,不僅速度慢调卑,而且必須聯(lián)網(wǎng)才能使用。

不過大咱,到了2002年恬涧,Linux系統(tǒng)已經(jīng)發(fā)展十年了,代碼庫之大讓Linus很難繼續(xù)通過手工方式管理了碴巾。BitMover公司出于人道主義精神溯捆,授權(quán)Linux社區(qū)免費使用商業(yè)版本的分布式版本控制系統(tǒng)BitKeeper來管理和維護代碼。安定團結(jié)的大好局面在2005年被打破厦瓢,開發(fā)BitKeeper的商業(yè)公司同Linux內(nèi)核開源社區(qū)的合作關(guān)系結(jié)束提揍,原因是Linux社區(qū)牛人聚集,開發(fā)Samba的Andrew試圖破解BitKeeper的協(xié)議煮仇,這么干的其實也不只他一個劳跃,但是被BitMover公司發(fā)現(xiàn)了,于是BitMover公司收回了Linux社區(qū)的免費使用權(quán)浙垫。這就迫使Linux開源社區(qū)(特別是Linux的締造者Linus Torvalds)不得不吸取教訓(xùn)刨仑,開發(fā)一套屬于自己的版本控制系統(tǒng)。

Git的目標

  • 速度
  • 簡單的設(shè)計
  • 對非線性開發(fā)模式的強力支持(允許上千個并行開發(fā)的分支)
  • 完全分布式
  • 有能力高效管理類似Linux內(nèi)核一樣的超大規(guī)模項目(速度和數(shù)據(jù)量)

Git和GitHub

2008年夹姥,GitHub網(wǎng)站上線杉武,它為開源項目免費提供Git存儲,無數(shù)開源項目開始遷移至GitHub佃声,包括jQuery艺智,PHP,Ruby等等圾亏。

版本控制系統(tǒng)

主要分為兩種:

  1. 集中式:CVS和SVN
  2. 分布式:Git

集中式的版本控制系統(tǒng)(SVN)

版本庫是集中存放在中央服務(wù)器的十拣,大家工作要先從中央服務(wù)器取得最新的版本封拧,工作完成后把自己的修訂推送到中央服務(wù)器。這類系統(tǒng)夭问,都有一個單一的集中管理的服務(wù)器泽西,保存所有文件的修訂版本,而協(xié)同工作的人們都通過客戶端連到這臺服務(wù)器缰趋,取得最新的文件或者提交更新捧杉。

Computer A和Computer B之間無法直接通信,只能通過中央服務(wù)器間接通信秘血。


SVN
SVN

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

根本沒有“中央服務(wù)器”味抖,每個人的電腦都是一個完整的版本庫。這樣你工作的時候灰粮,根本不需要聯(lián)網(wǎng)仔涩,因為版本庫就在你自己的電腦上。

那么多人如何協(xié)作粘舟?如果你在自己電腦上修改了A文件熔脂,你的同事在他的電腦上修改了B文件。你們倆之間只需要把各自的修改推送給對方就可以啦~

分布式比集中式的安全性高很多柑肴,因為每個人電腦里都有完整的版本庫霞揉,一個人的電腦壞掉了不要緊,從其他人那里復(fù)制一個就可以了晰骑。分布式版本控制系統(tǒng)适秩,也有一臺充當“中央服務(wù)器”的電腦,但是這個服務(wù)器的作用些侍,僅僅是用來方便“交換”大家的修改隶症。

Computer A和Computer B之間,也是可以相互通信的岗宣。


Git
Git

許多這類系統(tǒng)都可以指定和若干不同的遠端代碼倉庫進行交互。籍此淋样,你就可以在同一個項目中耗式,分別和不同工作小組的人相互協(xié)作。你可以根據(jù)需要設(shè)定不同的協(xié)作流程趁猴,比如層次模型式的工作流刊咳,而這在以前的集中式系統(tǒng)中是無法實現(xiàn)的。

Git配置

Git初始化

全局配置

使用Git的第一件事就是設(shè)置你的名字和email,這些就是你在提交commit時的簽名儡司,每次提交記錄里都會包含這些信息娱挨。使用git config命令進行配置:

$ git config --global user.name "Scott Chacon"
$ git config --global user.email "schacon@gmail.com"

執(zhí)行了上面的操作,會在家目錄下建立一個.gitconfig的隱藏文件捕犬,可使用cat ~/.gitconfig命令查看:

$ cat ~/.gitconfig
[user]
        email = schacon@gmail.com
        name = Scott Chacon

當前項目配置

如果你想使項目里的某個值與前面的全局設(shè)置有區(qū)別(例如把私人郵箱地址改為工作郵箱)跷坝,你可以在項目中使用git config 命令不帶 --global 選項來設(shè)置. 這會在你當前的項目目錄下創(chuàng)建.git/config酵镜,從而使用針對當前項目的配置。

GitHub新建倉庫

GitHub新建repository
GitHub新建repository

Clone一個倉庫

git clone https://github.com/LjyYano/test.git

這個命令是克隆出一個完整的版本庫柴钻,而不是簡單地拷貝文件淮韭,這和SVN不一樣~版本庫又名倉庫,英文名repository,你可以簡單的理解一個目錄贴届,這個目錄里面的所有文件都可以被Git管理起來靠粪,每個文件的修改、刪除毫蚓,Git都能跟蹤占键,以便任何時刻都可以追蹤歷史,或者在將來某個時刻還可以將文件”還原”元潘±袒牛可以查看到目錄中有.git的隱藏文件夾。

Git的工作流程

使用版本控制系統(tǒng)柬批,無非就是以下幾件事:

  1. 從服務(wù)器拉取文件
  2. 修改文件
  3. 提交文件
  4. 創(chuàng)建啸澡、合并分支

git的基本流程如下:

  1. 創(chuàng)建或修改文件
  2. 使用git add命令添加新創(chuàng)建或修改的文件到本地的緩存區(qū)
  3. 使用git commit命令提交到本地代碼庫
  4. 使用git push命令將本地代碼庫同步到遠端代碼庫

文件有兩種狀態(tài):

  1. tracked
  2. untracked

添加到本地的緩存區(qū)

新建一個文件git.txt,使用git status命令查看倉庫狀態(tài)氮帐。我們發(fā)現(xiàn)git.txt處于未跟蹤狀態(tài):

上面的截圖上已經(jīng)提示了嗅虏,使用git add添加可以commit的文件。

提交到本地倉庫

需要使用-m添加本次修改的注釋上沐,完成后就會記錄一個新的項目版本皮服。

git commit -m 'first'

同步到遠程倉庫

因為我們是從遠程倉庫clone的代碼,所以使用

git remote

發(fā)現(xiàn)已經(jīng)有一個origin了参咙,直接push即可

git push

刷新GitHub頁面龄广,發(fā)現(xiàn)已經(jīng)有了本地的修改(添加了git.txt文件)~

分支與合并

分支的作用體現(xiàn)在多人協(xié)作中,分支不影響主線(master分支)的開發(fā)蕴侧。比如一個團隊開發(fā)軟件择同,你負責獨立的一個功能需要一個月的時間來完成,你就可以創(chuàng)建一個分支净宵,只把該功能的代碼提交到這個分支敲才,而其他同事仍然可以繼續(xù)使用主線開發(fā),你每天的提交不會對他們造成任何影響择葡。當你完成功能后紧武,測試通過再把你的功能分支合并到主線。

下面以分支名exp為例:

查看分支

git branch

創(chuàng)建分支

git branch exp

切換分支

查看到當前還在master分支敏储,如何切換到exp分支阻星?

git checkout exp

提交分支

exp分支和master分支中的文件是隔離的,修改exp分支下的文件已添,并不會影響到master分支的文件妥箕。注:push前也需要add滥酥、commit等操作~

git push origin exp

合并分支

分別修改了master分支和exp分支的git.txt文件,如下圖:

合并exp分支 → master分支

git checkout master
git merge -m 'merge from exp' exp

撤銷合并

git reset --hard HEAD^

只能刪除那些已經(jīng)被當前分支的合并的分支矾踱, 如果你要強制刪除某個分支的話就用git branch –D

刪除分支

git branch –d exp

SSH傳輸

我們會發(fā)現(xiàn)有GitHub有兩種Clone方式:SSH 和 HTTPS恨狈。

SSH簡介

SSH - 百度百科

SSH 為 Secure Shell的縮寫,可以有效防止遠程管理過程中的信息泄露問題呛讲。

驗證

從客戶端來看禾怠,SSH提供兩種級別的安全驗證:

  1. 基于口令的安全驗證
  2. 基于密鑰的安全認證

第一種級別(基于口令的安全驗證)

只要你知道自己帳號和口令,就可以登錄到遠程主機贝搁。所有傳輸?shù)臄?shù)據(jù)都會被加密吗氏,但是不能保證你正在連接的服務(wù)器就是你想連接的服務(wù)器±啄妫可能會有別的服務(wù)器在冒充真正的服務(wù)器弦讽,也就是受到“中間人”這種方式的攻擊。

第二種級別(基于密匙的安全驗證)

需要依靠密匙膀哲,也就是你必須為自己創(chuàng)建一對密匙往产,并把公用密匙放在需要訪問的服務(wù)器上。如果你要連接到SSH服務(wù)器上某宪,客戶端軟件就會向服務(wù)器發(fā)出請求仿村,請求用你的密匙進行安全驗證。服務(wù)器收到請求之后兴喂,先在該服務(wù)器上你的主目錄下尋找你的公用密匙蔼囊,然后把它和你發(fā)送過來的公用密匙進行比較。如果兩個密匙一致衣迷,服務(wù)器就用公用密匙加密“質(zhì)詢”(challenge)并把它發(fā)送給客戶端軟件畏鼓。客戶端軟件收到“質(zhì)詢”之后就可以用你的私人密匙解密再把它發(fā)送給服務(wù)器壶谒。

用這種方式云矫,你必須知道自己密匙的口令。但是佃迄,與第一種級別相比泼差,第二種級別不需要在網(wǎng)絡(luò)上傳送口令。

第二種級別不僅加密所有傳送的數(shù)據(jù)呵俏,而且“中間人”這種攻擊方式也是不可能的(因為他沒有你的私人密匙)。但是整個登錄的過程可能需要10秒滔灶。

為什么使用SSH普碎?

傳統(tǒng)的網(wǎng)絡(luò)服務(wù)程序,有以下漏洞:

  1. 明文傳送口令和數(shù)據(jù)
  2. 易受到“中間人”攻擊

明文傳送口令和數(shù)據(jù)

傳統(tǒng)的網(wǎng)絡(luò)服務(wù)程序如:ftp录平、pop和telnet在本質(zhì)上都是不安全的麻车,因為它們在網(wǎng)絡(luò)上用明文傳送口令和數(shù)據(jù)缀皱,別有用心的人非常容易就可以截獲這些口令和數(shù)據(jù)。

“中間人”攻擊

容易受到“中間人”攻擊动猬,即:

你的數(shù)據(jù)  ?  ?中間人 ?? 服務(wù)器

使用SSH

創(chuàng)建 SSH Key

在用戶的主目錄下啤斗,查看是否有.ssh的隱藏目錄,查看里面是否有id_rsaid_rsa.pub這兩個文件赁咙,如果有的話胞得,直接跳過此如下命令楞陷,如果沒有的話,打開命令行,輸入如下命令:

ssh-keygen  -t rsa –C “youremail@example.com”

id_rsa是私鑰兔朦,不能泄露出去,id_rsa.pub是公鑰宰睡,可以放心地告訴任何人发乔。

GitHub 添加 SSH Key

將本地生成的id_rsa.pub公鑰內(nèi)容,添加到GitHub上盯桦,以后就可以使用SSH來連接GitHub了~

Git 命令總結(jié)

  • git config:配置相關(guān)信息
  • git clone:復(fù)制倉庫
  • git init:初始化倉庫
  • git add:添加更新內(nèi)容到索引中
  • git diff:比較內(nèi)容
  • git status:獲取當前項目狀況
  • git commit:提交
  • git branch:分支相關(guān)
  • git checkout:切換分支
  • git merge:合并分支
  • git reset:恢復(fù)版本
  • git log:查看日志

參考鏈接

  1. Git使用教程
  2. SSH - 百度百科
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末慈俯,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子拥峦,更是在濱河造成了極大的恐慌贴膘,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件事镣,死亡現(xiàn)場離奇詭異步鉴,居然都是意外死亡,警方通過查閱死者的電腦和手機璃哟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進店門氛琢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人随闪,你說我怎么就攤上這事阳似。” “怎么了铐伴?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵撮奏,是天一觀的道長。 經(jīng)常有香客問我当宴,道長畜吊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任户矢,我火速辦了婚禮玲献,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己捌年,他們只是感情好瓢娜,可當我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著礼预,像睡著了一般眠砾。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上托酸,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天褒颈,我揣著相機與錄音,去河邊找鬼获高。 笑死哈肖,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的念秧。 我是一名探鬼主播淤井,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼摊趾!你這毒婦竟也來了币狠?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤砾层,失蹤者是張志新(化名)和其女友劉穎漩绵,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肛炮,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡止吐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了侨糟。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片碍扔。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖秕重,靈堂內(nèi)的尸體忽然破棺而出不同,到底是詐尸還是另有隱情,我是刑警寧澤溶耘,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布二拐,位于F島的核電站,受9級特大地震影響凳兵,放射性物質(zhì)發(fā)生泄漏百新。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一庐扫、第九天 我趴在偏房一處隱蔽的房頂上張望吟孙。 院中可真熱鬧澜倦,春花似錦聚蝶、人聲如沸杰妓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽巷挥。三九已至,卻和暖如春验靡,著一層夾襖步出監(jiān)牢的瞬間倍宾,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工胜嗓, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留高职,地道東北人。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓辞州,卻偏偏與公主長得像怔锌,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子变过,可洞房花燭夜當晚...
    茶點故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理埃元,服務(wù)發(fā)現(xiàn),斷路器媚狰,智...
    卡卡羅2017閱讀 134,699評論 18 139
  • 1. 安裝 Github 查看是否安裝git: $ git config --global user.name "...
    Albert_Sun閱讀 13,665評論 9 163
  • 1.git的安裝 1.1 在Windows上安裝Git msysgit是Windows版的Git岛杀,從https:/...
    落魂灬閱讀 12,667評論 4 54
  • 雨夜的黃浦江邊,氤氳一片崭孤。似是被過分修圖般不真實类嗤。休閑裝,平底鞋辨宠,一支雨傘遗锣,Eva喜歡這樣的雨夜,獨自踱步的感覺彭羹。...
    AthenaKuo閱讀 1,004評論 0 1
  • jQuery函數(shù)方法 jQuery 中黄伊, $(document).ready()是什么意思? 當DOM準備就緒時派殷,...
    YM雨蒙閱讀 164評論 0 1