Git簡明復(fù)習(xí)指南
為什么需要版本管理工具呢层宫?
舉個(gè)栗子,比如我們寫畢業(yè)論文其监,經(jīng)常需要修改萌腿,有可能最新的修改改了一半發(fā)現(xiàn)搞錯(cuò)了,就要回退到前一個(gè)版本抖苦,甚至發(fā)現(xiàn)這幾天的修改都搞錯(cuò)了毁菱,要回退到前幾天的版本,解決這個(gè)問題的土辦法就是每次修改都另存為一個(gè)版本锌历,于是你的文件夾下是這個(gè)樣子的:
20160405_1.docx
20160405_2.docx
20160406_1.docx
20160406_1(更新).docx
20160406_1(最新復(fù)制).docx
20160406_1(修改版).docx
終稿.docx
終稿(0408最終版).docx
終稿(0408打死不改版本).docx
終稿(0408無力吐槽終版).docx
對(duì)于大多數(shù)懶癌患者來說贮庞,是不會(huì)為這個(gè)土辦法定義一個(gè)嚴(yán)格的命名規(guī)則的,所以時(shí)間越長辩涝,文件越多贸伐,天知道哪一個(gè)版本是最新的了勘天。另外怔揩,版本之間改動(dòng)了什么更是難以從文件標(biāo)題中體現(xiàn),更不用說團(tuán)隊(duì)共同編輯文件的沖突問題了脯丝。
版本管理工具就是為了解決這些高成本低效率的問題而產(chǎn)生的商膊。
碼農(nóng)常用的項(xiàng)目源碼管理工具中有cvs、svn宠进、git晕拆,雖然各有特點(diǎn),但是只要學(xué)會(huì)一個(gè)材蹬,其他臨時(shí)學(xué)習(xí)的成本也低实幕,筆者還是覺得git用得最爽,逼格最高堤器。不過要說明的是昆庇,不管哪種工具,都只能跟蹤文本的改動(dòng)闸溃,無法跟蹤二進(jìn)制內(nèi)容的改動(dòng)整吆,比如在文本的某行增加了一個(gè)單詞“hellword”拱撵,或者這個(gè)單詞修改為“helloword”,這個(gè)是可以跟蹤的表蝙,但是對(duì)于二進(jìn)制文件拴测,無法跟蹤某個(gè)字節(jié)的變動(dòng),只能跟蹤文件的大小變化府蛇。
cvs和svn都是集中式集索,那集中式和分布式有什么區(qū)別呢?不必了解欲诺,拋棄他們就是了抄谐!
git簡介
什么是git?
git是最有逼格的分布式版本管理系統(tǒng)扰法,因?yàn)樗莑inux大師linus開發(fā)的蛹含!憑什么linus開發(fā)的就最有逼格?因?yàn)檫@是他為了不向某商業(yè)公司道歉塞颁,任性花了兩周時(shí)間寫出來的浦箱,就跟黃老邪一樣,就是任性不解釋祠锣,這難道還沒有逼格酷窥?(具體八卦請(qǐng)google)
git能干什么?
簡單來說伴网,git在各個(gè)時(shí)間點(diǎn)把文檔的狀態(tài)作為一條條更新記錄保存起來(保存在數(shù)據(jù)庫中)蓬推,根據(jù)記錄就可以把文檔恢復(fù)到以前某個(gè)時(shí)間點(diǎn)的狀態(tài),也可以顯示編輯前后的變化澡腾,git也能保證避免多人參與編輯的沖突問題沸伏。
一些基本概念
- 遠(yuǎn)程數(shù)據(jù)庫:為了多人共享的服務(wù)器上的數(shù)據(jù)庫
- 本地?cái)?shù)據(jù)庫:為了方便用戶個(gè)人使用的本機(jī)上的數(shù)據(jù)庫
- 創(chuàng)建數(shù)據(jù)庫的方法有兩種:創(chuàng)建全新的本地?cái)?shù)據(jù)庫;復(fù)制遠(yuǎn)程數(shù)據(jù)庫
- 工作樹和索引:工作樹就是工作區(qū)动分,索引就是暫存區(qū)毅糟,文檔就是在工作區(qū)中進(jìn)行修改,修改后先加入暫存區(qū)澜公,然后再提交到數(shù)據(jù)庫中姆另。
Git基本操作流程
初始配置
git安裝后,首先要進(jìn)行一下身份配置坟乾,這個(gè)身份信息作為提交者信息顯示在更新記錄中迹辐。這里的global表示本機(jī)的所有倉庫都使用這個(gè)配置,就跟系統(tǒng)環(huán)境變量類似
git config --global user.name "username"
git config --global user.email "email"
另外為了顏值高一點(diǎn)甚侣,可以執(zhí)行如下命令
git config --global color.ui auto
創(chuàng)建數(shù)據(jù)庫
前面說過明吩,創(chuàng)建數(shù)據(jù)庫有兩種方法,在本地新建和復(fù)制遠(yuǎn)程數(shù)據(jù)庫
- 本地新建數(shù)據(jù)庫
$ mkdir gitExample
$ cd gitExample
$ git init
Initialized empty Git repository in /Users/yourname/gitExample/.git/
隨便在gitExample目錄下創(chuàng)建一個(gè)sample.txt的文本文件渺绒,輸入如下內(nèi)容:
helloworld
使用status命令可以查看工作區(qū)和暫存區(qū)的狀態(tài)
$ git status
# On branch master
#
# Initial commit
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# sample.txt
nothing added to commit but untracked files present (use "git add" to track)
上面顯示untracked說明文件的修改狀態(tài)還停留在工作區(qū)贺喝,沒有加入暫存區(qū)菱鸥,所以不能被跟蹤。接下來使用add命令加入暫存區(qū)躏鱼,格式為git add <file>..(用空格分割多個(gè)文件氮采,git add .可以把所有文件加入索引)
git add sample.txt
繼續(xù)使用status命令查看文件是否進(jìn)入暫存區(qū)
$ git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use "git rm --cached <file>..." to unstage)
#
# new file: sample.txt
#
上面顯示to be committed,說明文件狀態(tài)已經(jīng)被跟蹤了染苛,只需要提交了鹊漠,使用git commit -m " "
$ git commit -m "first commit"
[master (root-commit) 116a286] first commit
0 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 sample.txt
$ git status
# On branch master
nothing to commit (working directory clean)
使用log命令,就可以看到數(shù)據(jù)庫中最新的提交記錄
$ git log
commit 3c56e434afbbe1eab7ebce573ab48ac4c74ad601
Author: yourname <username@example.com>
Date: Thu Jul 12 18:00:21 2013 +0900
first commit
廖雪峰沒有說明的一些情況(不定期補(bǔ)上)
當(dāng)git init茶行,git add文件之后躯概,還沒來得及commit之前,此時(shí)版本庫中是沒有任何版本存在的畔师,這時(shí)候發(fā)現(xiàn)git add錯(cuò)了娶靡,需要撤銷,是無法使用git reset HEAD file的看锉,只能用git rm --cached file姿锭。