Git是一個(gè)強(qiáng)大的分布式的源代碼管理工具。Git是用C語(yǔ)言開(kāi)發(fā)的分布版本控制系統(tǒng)。版本控制系統(tǒng)可以保留一個(gè)文件集合的歷史記錄,并能回滾文件集合到另一個(gè)狀態(tài)(歷史記錄狀態(tài))。另一個(gè)狀態(tài)可以是不同的文件,也可以是不同的文件內(nèi)容。Git 2.8 發(fā)布了。Git 是一個(gè)開(kāi)源的分布式版本控制系統(tǒng),用以有效、高速的處理從很小到非常大的項(xiàng)目版本管理。
Git 2.8. 0 修復(fù)了安全相關(guān)的漏洞 , 主要針對(duì) 2.7.4中出現(xiàn)的漏洞 CVE - 2016 - 2324。雖然這個(gè)漏洞暫時(shí)沒(méi)有被利用 , 但可能造成潛在的安全隱患。建議大家升級(jí)到新的版本。
舉個(gè)例子,你可以將文件集合轉(zhuǎn)換到兩天之前的狀態(tài),或者你可以在生產(chǎn)代碼和實(shí)驗(yàn)性質(zhì)的代碼之間進(jìn)行切換。文件集合往往被稱作是“源代碼”。在一個(gè)分布版本控制系統(tǒng)中,每個(gè)人都有一份完整的源代碼(包括源代碼所有的歷史記錄信息),而且可以對(duì)這個(gè)本地的數(shù)據(jù)進(jìn)行操作。分布版本控制系統(tǒng)不需要一個(gè)集中式的代碼倉(cāng)庫(kù)。
Git是什么?
Git和 CVS、SVN不同,是一個(gè)分布式的源代碼管理工具。Linux內(nèi)核的代碼就是用Git管理的。它很強(qiáng),也很快。
Git支持分支功能(branch)。如果你想開(kāi)發(fā)一個(gè)新的產(chǎn)品功能,你可以建立一個(gè)分支,對(duì)這個(gè)分支的進(jìn)行修改,而不至于會(huì)影響到主支上的代碼。
Git提供了命令行工具;這個(gè)教程會(huì)使用命令行。你也可以找到圖形工具,譬如與Eclipse配套的EGit工具
它給我們帶來(lái)的直接好處有:
1. 傻瓜都會(huì)的初始化,git init, git commit -a, 就完了。對(duì)于隨便寫(xiě)兩行代碼就要放到代碼管理工具里的人來(lái)說(shuō),再合適不過(guò)。也可以拿git做備份系統(tǒng),或者同步兩臺(tái)機(jī)器的文檔,都很方便。
2. 絕大部分操作在本地完成,不用和集中的代碼管理服務(wù)器交互,終于可以隨時(shí)隨地大膽地check in代碼了。 只有最終完成的版本才需要向一個(gè)中心的集中的代碼管理服務(wù)器提交。
3. 每次提交都會(huì)對(duì)所有代碼創(chuàng)建一個(gè)唯一的commit id。不像CVS那樣都是對(duì)單個(gè)文件分別進(jìn)行版本的更改。所以你可以一次性將某次提交前的所有代碼check出來(lái),而不用考慮到底提交過(guò)那些文件。(其實(shí)SVN也可以做到這點(diǎn))
4. branch管理容易多了,無(wú)論是建立新的branch,還是在branch之間切換都一條命令完成,不需要建立多余的目錄。
5. branch之間merge時(shí),不僅代碼會(huì)merge在一起,check in歷史也會(huì)保留,這點(diǎn)非常重要。
6. … 太多了
Git與CVS的區(qū)別:
分支更快、更容易。
支持離線工作;本地提交可以稍后提交到服務(wù)器上。
Git 提交都是原子的,且是整個(gè)項(xiàng)目范圍的,而不像 CVS 中一樣是對(duì)每個(gè)文件的。
Git 中的每個(gè)工作樹(shù)都包含一個(gè)具有完整項(xiàng)目歷史的倉(cāng)庫(kù)。
沒(méi)有哪一個(gè) Git 倉(cāng)庫(kù)會(huì)天生比其他倉(cāng)庫(kù)更重要
遠(yuǎn)程倉(cāng)庫(kù)相關(guān)命令:
檢出倉(cāng)庫(kù):$ git clone git://github.com/jquery/jquery.git
查看遠(yuǎn)程倉(cāng)庫(kù):$ git remote –v
添加遠(yuǎn)程倉(cāng)庫(kù):$ git remote add [name] [url]
刪除遠(yuǎn)程倉(cāng)庫(kù):$ git remote rm [name]
拉取遠(yuǎn)程倉(cāng)庫(kù):$ git pull [remoteName] [localBranchName]
推送遠(yuǎn)程倉(cāng)庫(kù):$ git push [remoteName] [localBranchName]
分支(branch)操作相關(guān)命令查看本地分支:$ git branch
查看遠(yuǎn)程分支:$ git branch –r
創(chuàng)建本地分支:$ git branch [name] ----注意新分支創(chuàng)建后不會(huì)自動(dòng)切換為當(dāng)前分支
切換分支:$ git checkout [name]
創(chuàng)建新分支并立即切換到新分支:$ git checkout -b [name]
刪除分支:$ git branch -d [name] ---- -d選項(xiàng)只能刪除已經(jīng)參與了合并的分支,對(duì)于未有合并的分支是無(wú)法刪除的。如果想強(qiáng)制刪除一個(gè)分支,可以使用-D選項(xiàng)
合并分支:$ git merge [name] ----將名稱為[name]的分支與當(dāng)前分支合并創(chuàng)建遠(yuǎn)程分支
(本地分支push到遠(yuǎn)程):$ git push origin [name]
刪除遠(yuǎn)程分支:$ git push origin :heads/[name]
版本(tag)操作相關(guān)命令查看版本:$ git tag
創(chuàng)建版本:$ git tag [name]
刪除版本:$ git tag -d [name]
查看遠(yuǎn)程版本:$ git tag –r
創(chuàng)建遠(yuǎn)程版本(本地版本push到遠(yuǎn)程):$ git push origin [name]
刪除遠(yuǎn)程版本:$ git push origin :refs/tags/[name]
子模塊(submodule)相關(guān)操作命令添加子模塊:$ git submodule add [url] [path]
初始化子模塊:$ git submodule init ----只在首次檢出倉(cāng)庫(kù)時(shí)運(yùn)行一次就行
更新子模塊:$ git submodule update ----每次更新或切換分支后都需要運(yùn)行一下
刪除子模塊:$ git rm --cached [path]
忽略一些文件、文件夾不提交在倉(cāng)庫(kù)根目錄下創(chuàng)建名稱為“.gitignore”的文件,寫(xiě)入不需要的文件夾名或文件,每個(gè)元素占一行即可,如targetbin*.db