一、什麼是版本控制
版本控制(Revision control)是一種在開發的過程中用于管理我們對檔案、目錄或工程等内容的修改曆史,友善檢視更改曆史記錄,備份以便恢複以前的版本的軟體工程技術。
- 實作跨區域多人協同開發
- 追蹤和記載一個或者多個檔案的曆史記錄
- 組織和保護你的源代碼和文檔
- 統計工作量
- 并行開發、提高開發效率
- 跟蹤記錄整個軟體的開發過程
- 減輕開發人員的負擔,節省時間,同時降低人為錯誤
- 簡單說就是用于管理多人協同開發項目的技術。
二、常見的版本控制器
主流的版本控制器有如下這些:(現在影響力最大且使用最廣泛的是Git與SVN)
- Git
- SVN(Subversion)
- CVS(Concurrent Versions System)
- VSS(Micorosoft Visual SourceSafe)
- TFS(Team Foundation Server)
三、版本控制分類
-
本地版本控制
-- 記錄檔案每次的更新,可以對每個版本做一個快照,或是記錄更新檔檔案,适合個人用,如RCS。
-
集中版本控制
-- 所有的版本資料都儲存在伺服器上,協同開發者從伺服器上同步更新或上傳自己的修改所有的版本資料都存在伺服器上,使用者的本地隻有自己以前所同步的版本,如果不連網的話,使用者就看不到曆史版本,也無法切換版本驗證問題,或在不同分支工作。而且,所有資料都儲存在單一的伺服器上,有很大的風險這個伺服器會損壞,這樣就會丢失所有的資料,當然可以定期備份。代表産品:SVN、CVS、VSS
-
分布式版本控制
-- 所有版本資訊倉庫全部同步到本地的每個使用者,這樣就可以在本地檢視所有版本曆史,可以離線在本地送出,隻需在連網時push到相應的伺服器或其他使用者那裡。由于每個使用者那裡儲存的都是所有的版本資料,隻要有一個使用者的裝置沒有問題就可以恢複所有的資料,但這增加了本地存儲空間的占用。
四、Git與SVN最主要差別
- SVN是集中式版本控制系統,版本庫是集中放在中央伺服器的,而工作的時候,用的都是自己的電腦,是以首先要從中央伺服器得到最新的版本,然後工作,完成工作後,需要把自己做完的活推送到中央伺服器。集中式版本控制系統是必須聯網才能工作,對網絡帶寬要求較高。
- Git是分布式版本控制系統,沒有中央伺服器,每個人的電腦就是一個完整的版本庫,工作的時候不需要聯網了,因為版本都在自己電腦上。協同的方法是這樣的:比如說自己在電腦上改了檔案A,其他人也在電腦上改了檔案A,這時,你們兩之間隻需把各自的修改推送給對方,就可以互相看到對方的修改了。
五、Git的下載下傳安裝
打開
git官網,下載下傳git對應作業系統的版本。按照系統的提示預設安裝就ok!
六、基本操作指令
cd ---改變目錄。
cd .. ---回退到上一個目錄,直接cd進入預設目錄
pwd --- 顯示目前所在的目錄路徑。
mkdir ---建立檔案夾
rm -rf 目錄名稱 ---删除目錄下的所有檔案、檔案夾
rm -r 檔案 ---删除檔案
ls ---檢視檔案
ls -la ---檢視檔案、隐藏檔案
vi 檔案名 ---建立并打開檔案
a ---編輯模式
ESC ---退出編輯模式
ZZ ---儲存
cat filename ---檢視檔案内容
clear ---清屏
history ---檢視指令曆史
七、Git核心工作流程
Git本地有三個工作區域:工作目錄(Working Directory)、暫存區(Stage/Index)、資源庫(Repository或Git Directory)。如果在加上遠端的git倉庫(Remote Directory)就可以分為四個工作區域。檔案在這四個區域之間的轉換。
- Workspace:工作區,就是你平時存放項目代碼的地方
- Index / Stage:暫存區,用于臨時存放你的改動,事實上它隻是一個檔案,儲存即将送出到檔案清單資訊
- Repository:倉庫區(或本地倉庫),就是安全存放資料的位置,這裡面有你送出到所有版本的資料。其中HEAD指向最新放入倉庫的版本
- Remote:遠端倉庫,托管代碼的伺服器,可以簡單的認為是你項目組中的一台電腦用于遠端資料交換
7.1 git最基本的5個指令:
- git init,初始化,表示即将對目前檔案夾進行版本控制。
- git status,檢視Git目前狀态,如:那些檔案被修改過、那些檔案還未送出到版本庫等。
- git add 檔案名,将指定檔案添加到版本庫的暫存狀态。
- git commit -m '送出資訊',将暫存區的檔案送出到版本庫。
- git log,檢視送出記錄,即:曆史版本記錄
7.2 丢棄工作區檔案
- git checkout -- filename ,丢棄工作區指定檔案内容
- git checkout -- . ,丢棄工作區所有檔案内容
7.3 版本復原操作
- git reset --soft 版本号 ,復原到指定版本
- git reset 版本号 ,復原到指定版本
- git reset --hard 版本号 ,復原到指定版本,将之前的删除(慎用)
- git reflog ,找到所有的曆史記錄
- git reset HEAD ./filename ,從暫存區回到工作區
7.4 标簽操作
- git tag "标簽名" ,給最新版本加标簽
- git tag "标簽名" 版本号 ,給曆史版本加标簽
- git tag -d "标簽名" ,删除标簽
- git show "标簽名" ,檢視标簽内容
7.5 分支操作
- git branch 分支名稱 建立分支
- git checkout 分支名稱 切換分支
- git branch -m 分支名稱 建立并切換到指定分支
- git branch 檢視所有分支
- git branch -d 分支名稱 删除分支
- git merge 分支名稱 将指定分支合并到目前分支
7.6 push代碼
- git remote add origin https://github.com/wangjifei/pondo.git , 為位址起一個别名origin(僅第一次需要)
- git remote remove origin,取消本地目錄下關聯的遠端庫:
- git push origin master , 将本地master分支内容以及版本資訊推送到GitHub
7.7 clone代碼
7.8 拉代碼
- git checkout dev ,切換到dev分支
-
git pull origin dev , 從遠端GitHub倉庫擷取dev分支最新内容,并合并到本地
【git pull origin 分支】指令等同于【git fetch origin 分支】+ 【git merge origin/分支】
更多詳情:
http://www.cnblogs.com/syp172654682/p/7689328.html(細而全,但略顯複雜)
https://www.cnblogs.com/wupeiqi/p/7295372.html(簡潔生動)