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