git

版本控制

版本控制(Revision control)是一種在開發(fā)的過程中用于管理我們對文件涮阔、目錄或工程等內(nèi)容的修改歷史窿锉,方便查看更改歷史記錄,備份以便恢復(fù)以前的版本的軟件工程技術(shù)。

  • 實(shí)現(xiàn)跨區(qū)域多人協(xié)同開發(fā)
  • 追蹤和記載一個(gè)或者多個(gè)文件的歷史記錄
  • 組織和保護(hù)你的源代碼和文檔
  • 統(tǒng)計(jì)工作量
  • 并行開發(fā)升酣、提高開發(fā)效率
  • 跟蹤記錄整個(gè)軟件的開發(fā)過程
  • 減輕開發(fā)人員的負(fù)擔(dān)诫睬,節(jié)省時(shí)間厢漩,同時(shí)降低人為錯(cuò)誤

簡單說就是用于管理多人協(xié)同開發(fā)項(xiàng)目的技術(shù)。

沒有進(jìn)行版本控制或者版本控制本身缺乏正確的流程管理岩臣,在軟件開發(fā)過程中將會引入很多問題溜嗜,如軟件代碼的一致性、軟件內(nèi)容的冗余架谎、軟件過程的事物性炸宵、軟件開發(fā)過程中的并發(fā)性、軟件源代碼的安全性谷扣,以及軟件的整合等問題土全。

常見版本控制

git SVN CVS VSS TFS

本地版本控制:記錄文件的每次更新捎琐,對每個(gè)版本做一個(gè)快照,適合個(gè)人使用

集中版本控制:所有版本數(shù)據(jù)都保存在服務(wù)器上裹匙,協(xié)同開發(fā)者從服務(wù)器上同步或更新自己的修改瑞凑,所有的版本數(shù)據(jù)都存在服務(wù)器上,用戶的本地只有自己以前所同步的版本概页,如果不連網(wǎng)的話籽御,用戶就看不到歷史版本,也無法切換版本驗(yàn)證問題惰匙,或在不同分支工作技掏。而且,所有數(shù)據(jù)都保存在單一的服務(wù)器上项鬼,有很大的風(fēng)險(xiǎn)這個(gè)服務(wù)器會損壞哑梳,這樣就會丟失所有的數(shù)據(jù),當(dāng)然可以定期備份绘盟。代表產(chǎn)品:SVN鸠真、CVS、VSS

分布式版本控制:所有版本信息倉庫全部同步到本地的每個(gè)用戶龄毡,這樣就可以在本地查看所有版本歷史弧哎,可以離線在本地提交,只需在連網(wǎng)時(shí)push到相應(yīng)的服務(wù)器或其他用戶那里稚虎。由于每個(gè)用戶那里保存的都是所有的版本數(shù)據(jù)撤嫩,只要有一個(gè)用戶的設(shè)備沒有問題就可以恢復(fù)所有的數(shù)據(jù),但這增加了本地存儲空間的占用蠢终。不會因?yàn)榉?wù)器損壞或者網(wǎng)絡(luò)問題序攘,造成不能工作的情況!

SVN是集中式版本控制系統(tǒng)寻拂,版本庫是集中放在中央服務(wù)器的程奠,而工作的時(shí)候,用的都是自己的電腦祭钉,所以首先要從中央服務(wù)器得到最新的版本瞄沙,然后工作,完成工作后慌核,需要把自己做完的活推送到中央服務(wù)器距境。集中式版本控制系統(tǒng)是必須聯(lián)網(wǎng)才能工作,對網(wǎng)絡(luò)帶寬要求較高垮卓。

Git是分布式版本控制系統(tǒng)垫桂,沒有中央服務(wù)器,每個(gè)人的電腦就是一個(gè)完整的版本庫粟按,工作的時(shí)候不需要聯(lián)網(wǎng)了诬滩,因?yàn)榘姹径荚谧约弘娔X上霹粥。協(xié)同的方法是這樣的:比如說自己在電腦上改了文件A,其他人也在電腦上改了文件A疼鸟,這時(shí)后控,你們兩之間只需把各自的修改推送給對方,就可以互相看到對方的修改了空镜。Git可以直接看到更新了哪些代碼和文件浩淘!

git配置

查看配置 git config -l
#查看系統(tǒng)config
git config --system --list
#查看當(dāng)前用戶(global)配置
git config --global  --list
1)、Git\etc\gitconfig  :Git 安裝目錄下的 gitconfig     --system 系統(tǒng)級
2)姑裂、C:\Users\Administrator\ .gitconfig    只適用于當(dāng)前登錄用戶的配置  --global 全局
git config --global user.name "kuangshen"  #名稱
git config --global user.email 24736743@qq.com   #郵箱

基礎(chǔ)

workspace工作區(qū):平時(shí)存放代碼的地方
 |/ git add          |\  git checkout
index/stage:暫存區(qū)馋袜,用于臨時(shí)存放改動男旗,只是一個(gè)文件舶斧,保存即將提交到文件列表的信息
 |/ git commit       |\ git reset
repository本地倉庫區(qū):安全存放數(shù)據(jù)的位置,有提交到所有版本的數(shù)據(jù)察皇,HEAD指向最新放入倉庫的版本
 |/ git push         |\ git pull
remote:遠(yuǎn)端倉庫茴厉,托管代碼的服務(wù)器

Directory:使用Git管理的一個(gè)目錄,也就是一個(gè)倉庫什荣,包含我們的工作空間和Git的管理空間矾缓。
WorkSpace:需要通過Git進(jìn)行版本控制的目錄和文件,這些目錄和文件組成了工作空間稻爬。
.git:存放Git管理信息的目錄嗜闻,初始化倉庫的時(shí)候自動創(chuàng)建。
Index/Stage:暫存區(qū)桅锄,或者叫待提交更新區(qū)琉雳,在提交進(jìn)入repo之前,我們可以把所有的更新放在暫存區(qū)友瘤。
Local Repo:本地倉庫翠肘,一個(gè)存放在本地的版本庫;HEAD會只是當(dāng)前的開發(fā)分支(branch)辫秧。
Stash:隱藏束倍,是一個(gè)工作狀態(tài)保存棧,用于保存/恢復(fù)WorkSpace中的臨時(shí)狀態(tài)盟戏。

工作流程

git的工作流程一般是這樣的:
1绪妹、在工作目錄中添加、修改文件柿究;
2喂急、將需要進(jìn)行版本管理的文件放入暫存區(qū)域;
3笛求、將暫存區(qū)域的文件提交到git倉庫廊移。
因此糕簿,git管理的文件有三種狀態(tài):已修改(modified),已暫存(staged),已提交(committed)

    |---commit -a-------------->|
    |--add (-u)-->|---commit--->|--push-------->|
workspace        index       local res     remote res
    |<---------pull or rebase-------------------|
                                |<-------fetch--|
    |<----checkout HEAD---------|     
    |<----checkout-|                 revert
    |----diff HEAD--------------|
    |----diff------|                 compare

命令

# 本地倉庫創(chuàng)建
1、創(chuàng)建全新的倉庫狡孔,需要用GIT管理的項(xiàng)目的根目錄執(zhí)行:
git init
2懂诗、執(zhí)行后可以看到,僅僅在項(xiàng)目目錄多出了一個(gè).git目錄苗膝,關(guān)于版本等的所有信息都在這個(gè)目錄里面殃恒。
# 克隆
1、另一種方式是克隆遠(yuǎn)程目錄辱揭,由于是將遠(yuǎn)程服務(wù)器上的倉庫完全鏡像一份至本地离唐!
git clone [url]

文件狀態(tài)

版本控制就是對文件的版本控制,要對文件進(jìn)行修改问窃、提交等操作亥鬓,首先要知道文件當(dāng)前在什么狀態(tài),不然可能會提交了現(xiàn)在還不想提交的文件域庇,或者要提交的文件沒提交上嵌戈。

  • Untracked: 未跟蹤, 此文件在文件夾中, 但并沒有加入到git庫, 不參與版本控制. 通過git add 狀態(tài)變?yōu)镾taged.
  • Unmodify: 文件已經(jīng)入庫, 未修改, 即版本庫中的文件快照內(nèi)容與文件夾中完全一致. 這種類型的文件有兩種去處, 如果它被修改, 而變?yōu)镸odified. 如果使用git rm移出版本庫, 則成為Untracked文件
  • Modified: 文件已修改, 僅僅是修改, 并沒有進(jìn)行其他的操作. 這個(gè)文件也有兩個(gè)去處, 通過git add可進(jìn)入暫存staged狀態(tài), 使用git checkout 則丟棄修改過, 返回到unmodify狀態(tài), 這個(gè)git checkout即從庫中取出文件, 覆蓋當(dāng)前修改 !
  • Staged: 暫存狀態(tài). 執(zhí)行g(shù)it commit則將修改同步到庫中, 這時(shí)庫中的文件和本地文件又變?yōu)橐恢? 文件為Unmodify狀態(tài). 執(zhí)行g(shù)it reset HEAD filename取消暫存, 文件狀態(tài)為Modified
#查看指定文件狀態(tài)
git status [filename]
#查看所有文件狀態(tài)
git status
# git add .                  添加所有文件到暫存區(qū)
# git commit -m "消息內(nèi)容"    提交暫存區(qū)中的內(nèi)容到本地倉庫 -m 提交信息

忽略文件

有些時(shí)候我們不想把某些文件納入版本控制中,比如數(shù)據(jù)庫文件听皿,臨時(shí)文件晨仑,設(shè)計(jì)文件等

在主目錄下建立".gitignore"文件刊橘,此文件有如下規(guī)則:

  1. 忽略文件中的空行或以井號(#)開始的行將會被忽略票渠。

  2. 可以使用Linux通配符拂檩。例如:星號(*)代表任意多個(gè)字符,問號(又厉?)代表一個(gè)字符九府,方括號([abc])代表可選字符范圍,大括號({string1,string2,...})代表可選的字符串等馋没。

  3. 如果名稱的最前面有一個(gè)感嘆號(!)昔逗,表示例外規(guī)則,將不被忽略篷朵。

  4. 如果名稱的最前面是一個(gè)路徑分隔符(/)勾怒,表示要忽略的文件在此目錄下,而子目錄中的文件不忽略声旺。

  5. 如果名稱的最后面是一個(gè)路徑分隔符(/)笔链,表示要忽略的是此目錄下該名稱的子目錄,而非文件(默認(rèn)文件或目錄都忽略)腮猖。

#為注釋
*.txt        #忽略所有 .txt結(jié)尾的文件,這樣的話上傳就不會被選中鉴扫!
!lib.txt     #但lib.txt除外
/temp        #僅忽略項(xiàng)目根目錄下的TODO文件,不包括其它目錄temp
build/       #忽略build/目錄下的所有文件
doc/*.txt    #會忽略 doc/notes.txt 但不包括 doc/server/arch.txt

分支

# 列出所有本地分支
git branch

# 列出所有遠(yuǎn)程分支
git branch -r

# 新建一個(gè)分支,但依然停留在當(dāng)前分支
git branch [branch-name]

# 新建一個(gè)分支澈缺,并切換到該分支
git checkout -b [branch]

# 合并指定分支到當(dāng)前分支
$ git merge [branch]

# 刪除分支
$ git branch -d [branch-name]

# 刪除遠(yuǎn)程分支
$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末坪创,一起剝皮案震驚了整個(gè)濱河市炕婶,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌莱预,老刑警劉巖柠掂,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異依沮,居然都是意外死亡涯贞,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進(jìn)店門危喉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來宋渔,“玉大人,你說我怎么就攤上這事辜限』始穑” “怎么了?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵列粪,是天一觀的道長审磁。 經(jīng)常有香客問我谈飒,道長岂座,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任杭措,我火速辦了婚禮费什,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘手素。我一直安慰自己鸳址,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布泉懦。 她就那樣靜靜地躺著稿黍,像睡著了一般。 火紅的嫁衣襯著肌膚如雪崩哩。 梳的紋絲不亂的頭發(fā)上巡球,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天,我揣著相機(jī)與錄音邓嘹,去河邊找鬼酣栈。 笑死,一個(gè)胖子當(dāng)著我的面吹牛汹押,可吹牛的內(nèi)容都是我干的矿筝。 我是一名探鬼主播,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼棚贾,長吁一口氣:“原來是場噩夢啊……” “哼窖维!你這毒婦竟也來了榆综?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤铸史,失蹤者是張志新(化名)和其女友劉穎奖年,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體沛贪,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡陋守,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了利赋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片水评。...
    茶點(diǎn)故事閱讀 40,090評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖媚送,靈堂內(nèi)的尸體忽然破棺而出中燥,到底是詐尸還是另有隱情,我是刑警寧澤塘偎,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布疗涉,位于F島的核電站,受9級特大地震影響吟秩,放射性物質(zhì)發(fā)生泄漏咱扣。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一涵防、第九天 我趴在偏房一處隱蔽的房頂上張望闹伪。 院中可真熱鬧,春花似錦壮池、人聲如沸偏瓤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽厅克。三九已至,卻和暖如春橙依,著一層夾襖步出監(jiān)牢的瞬間证舟,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工票编, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留褪储,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓慧域,卻偏偏與公主長得像鲤竹,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評論 2 355

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