文章目錄
一、版本控制工具
1、概念
版本控制(Revision control)是指對軟件開發過程中各種程序代碼、配置文件及說明文檔等文件變更的管理,是軟件配置管理的核心思想之一。
2、版本控制的目的
- 實現跨區域多人協同開發
- 追蹤和記載一個或者多個文件的歷史記錄
- 組織和保護你的源代碼和文檔
- 統計工作量
- 並行開發、提高開發效率
- 跟蹤記錄整個軟件的開發過程
- 減輕開發人員的負擔,節省時間,同時降低人爲錯誤
- 簡單說就是用於管理多人協同開發項目的技術
3、常見的版本控制工具
-
SVN
SVN是Subversion的簡稱,是一個開放源代碼的集中式的版本管理系統,採用分支管理系統,它的設計目標就是取代CVS。說得簡單一點SVN就是用於多個人共同開發同一個項目,共用資源的目的。
-
Git
Git 是一個開源的分佈式版本控制系統,用於敏捷高效地處理任何或小或大的項目。Git 是 Linus Torvalds 爲了幫助管理 Linux 內核開發而開發的一個開放源碼的版本控制軟件。Git 與常用的版本控制工具 CVS, Subversion 等不同,它採用了分佈式版本庫的方式,不必服務器端軟件支持。
4、Git與SVN比較
-
Git是分佈式的
這也是大家最容易想到的Git與SVN的不同之處,我們知道SVN是一個集中式的版本控制系統,它實現版本控制的原理就是將多人協作的內容保存在一箇中央倉庫中,客戶端只能通過中央倉庫來進行更新和推送資源,而Git是分佈式的版本控制系統,他不需要中央服務器,也沒有服務端和客戶端之分,實際上每一個代碼提交者的主機都作爲一個服務端,每臺電腦都有一個完整的代碼庫。文件的修改可以只通過每臺電腦之間進行push就可以,但是實際操作過程中不能保證每臺電腦都是開機或者可用的,所以一般還是需要一臺中央服務器,這臺服務器的目的只方便每臺客戶端交換修改信息。
-
Git 把內容按元數據方式存儲,而 SVN 是按文件
所有的資源控制系統都是把文件的元信息隱藏在一個類似 .svn、.cvs 等的文件夾裏。
-
Git 分支和 SVN 的分支不同
分支在 SVN 中一點都不特別,其實它就是版本庫中的另外一個目錄。
-
Git 沒有一個全局的版本號,而 SVN 有
目前爲止這是跟 SVN 相比 Git 缺少的最大的一個特徵。 -
Git 的內容完整性要優於 SVN
Git 的內容存儲使用的是 SHA-1 哈希算法。這能確保代碼內容的完整性,確保在遇到磁盤故障和網絡問題時降低對版本庫的破壞。
-
Git存在特殊的遠程提交
對集中式版本控制系統SVN來說,所以並沒有遠程提交的概念,它對文件每一次增加、修改、刪除操作如果提交到中央倉庫都要進行commit操作,而Git有本地倉庫和遠程倉庫的概念,每一次commit的操作其實只是提交到了本地倉庫,如果提交到遠程倉庫需要執行git push操作。
二、Git工作流程
一般工作流程如下:
-
克隆 Git 資源作爲工作目錄。
-
在克隆的資源上添加或修改文件。
-
如果其他人修改了,你可以更新資源。
-
在提交前查看修改。
-
提交修改。
-
在修改完成後,如果發現錯誤,可以撤回提交併再次修改並提交
git管理的文件有三種狀態:已修改(modified),已暫存(staged),已提交(committed)。
三、Git四個工作區域
Git本地有四個工作區域:工作目錄(Working Directory)、暫存區(Stage/Index)、資源庫(Repository或Git Directory)、git倉庫(Remote Directory)。
- **工作區:**工作的文件目錄
- **暫存區:**英文叫stage, 或index。一般存放在 “.git目錄下” 下的index文件(.git/index)中,所以我們把暫存區有時也叫作索引(index)。
- **資源庫:**工作區有一個隱藏目錄.git,這個不算工作區,而是Git的資源庫也叫版本庫。
- **遠程倉庫:**託管代碼的服務器,也就是前面提到的用於遠程數據交換的倉庫。
四、分支
-
概念
分支是爲了將修改記錄的整體流程分叉保存。分叉後的分支不受其他分支的影響,所以在同一個數據庫裏可以同時進行多個修改,使用分支的目的是一旦出現新的bug或者業務修改,就需要從開發主線上分離開來,然後在不影響主線的同時繼續工作。
(後面再補充)
五、Git常用命令
我們只需使它初始化,使用當前目錄作爲Git倉庫,在執行完成 git init 命令後,Git 倉庫會生成一個 .git 目錄,該目錄包含了資源的所有元數據。
git init
新建一個目錄newrepo,將其初始化爲Git代碼庫
git init newrepo
下載項目文件
#從指定倉庫clone項目
git clone url
#從指定倉庫clone項目到指定目錄
git clone url <directory>
添加文件,將文件從工作區添加到暫存區
#添加指定文件或者目錄
git add [file]/[dir]
#添加目錄下的全部文件
git add .
將文件從緩存區移除
#刪除暫存區或分支上的文件,工作區也將刪除
git rm file
#強制刪除
git rm -f file
#如果把文件從暫存區域移除,但仍然希望保留在當前工作目錄中
git rm --cached file
從暫存區添加到版本庫
#從暫存區添加到版本庫
git commit -m '版本更新說明'
#移除不必要的添加到暫存區的文件
git reset HEAD 文件名
#去掉上一次的提交(會直接變成add之前狀態)
git reset HEAD^
#去掉上一次的提交(變成add之後,commit之前狀態)
git reset --soft HEAD^
從遠程倉庫拉取
git push
向遠程倉庫推送
git push
關聯遠程倉庫
git romote url
查看文件狀態
git status file
git status