目前全世界用得最多的版本控制工具git和SVN,其中git是分佈式控制系統,SVN是集中式控制。下面先說說集中式和分佈式控制的區別。
一、集中式VS分佈式
集中式
工作過程
1、從服務器下載最新代碼。
2、進入自己的分支,進行工作,每隔一個小時向服務器自己的分支提交一次代碼(對代碼改來改去,想看前一個小時自己修改了哪些代碼,就需要這樣做)。
3、從服務器下載最新代碼,並解決服務器版本庫與本地代碼的衝突,將自己的分支合併到服務器主分支上。
集中式:如果中央服務器出故障,SVN的歷史庫存在於中央倉庫,每次對比與提交代碼都必須連接到中央倉庫才能進行;斷網的情況下,其實也能是工作,但是由於沒有版本控制的記錄,當多人修改後就比較難以快速的合併。
數據存儲方式
大部分版本控制系統以文件變更列表的方式存儲信息,它們將保存的信息看作是一組基本文件和每個文件隨時間逐步累積的差異。
分佈式
工作過程
1 從服務器上克隆完整的Git倉庫(包括代碼和版本信息)到本機上。
2 在自己的機器上根據不同的開發目的,創建分支,修改代碼。
3 在單機上自己創建的分支上提交代碼、合併分支,提交到本地版本庫。
4 把服務器上最新版的代碼pull/fetch下來,解決服務器版本庫與本地代碼的衝突,然後跟自己的主分支合併。
5 如果沒問題,push到服務器
分佈式:如果中央服務器故障,Git本地倉庫包含代碼庫還有歷史庫,不需要網絡,自己可以在脫機環境查看開發的版本歷史,在本地的環境開發也可以進行比對,回退等操作。Git都在本地保存了版本記錄,所以大家合併起來就容易多了,等到服務器好了,直接提交就行了;或者可以隨時創建一個新的中央庫,隨便從其他人那裏複製一個然後同步就立刻恢復了中央庫。
數據存儲方式
Git把數據看作是對小型文件系統的一組快照。 每次你提交更新,或保存項目狀態時,它主要對當時的全部文件製作一個快照並保存這個快照的索引。
爲了高效,如果文件沒有修改,Git 不再重新存儲該文件,而是隻保留一個鏈接指向之前存儲的文件。
git相關概念
Git工作區域種類:
工作區(工作目錄):電腦裏能看到的目錄
版本庫( Git 倉庫目錄):工作區有一個隱藏目錄.git,就是Git的版本庫。
暫存區域:一個文件,保存了下次將提交的文件列表信息,一般在 Git 倉庫目錄中。 有時候也被 稱作`索引’,不過一 般說法還是叫暫存區域。
tips:Git版本庫中爲我們自動創建的第一個分支master,以及指向master的一個指針叫HEAD。
被管理文件的幾種狀態:
已修改(modified):表示修改了文件,但還沒保存到本地版本庫中
已暫存(staged):表示對一個已修改文件的當前版本做了標記,使之包含在下次提交的快照中
已提交(committed):表示數據已經安全的保存在本地版本庫中
Git 工作流程:在工作目錄中修改文件 暫存文件將文件的快照放入暫存區域 提交更新,找到暫存區域的文件,將快照永久性存儲到 Git 倉庫目錄。
下載安裝
1、從Git官網直接 https://git-scm.com/downloads下載安裝程序
2、安裝完成後,命令行輸入“git --version”,顯示如下信息表示安裝成功。
3、設置用戶信息,用戶名稱與郵件地址,每一個Git的提交都會使用這些信息,並且它會寫入到你的每一次提交中,不可更改
$ git config --global user.name “Your Name”
$ git config --global user.email " [email protected] "
注意git config命令的–global參數,用了這個參數,表示你這臺機器上所有的Git倉庫都 會使用這個配置,當然也可以對某個倉庫指定不同的用戶名和Email地址。
4、檢查配置信息
git config --list
git知識點彙總
git倉庫
git倉庫可以簡單理解成一個目錄,這個目錄裏面的所有文件都可以被Git管理起來,每個文件的修改、刪除,Git都能跟蹤,以便任何時刻都可以追蹤歷史,或者在將來某個時刻可以“還原”。
創建git倉庫
有兩種方法創建Git倉庫
1、通過$ git init命令在現有目錄中初始化倉庫
該命令將創建一個名爲 .git 的子目錄,這個子目錄含有你初始化的Git倉庫中所有的必須文件,就是Git的版本庫。
如果你是在一個已經存在文件的文件夾(而不是空文件夾)中初始化Git倉庫的話。
文件並不會被跟蹤,通過git add 命令來實現對指定文件的跟蹤,然後執行git commit提交(命令後面會講)。
2、從一個服務器克隆一個現有的 Git 倉庫
$ git clone https://github.com/test/test
在當前目錄下創建一個名爲“test”的目錄,並在這個目錄下初始化一個 .git 文件夾,從遠程倉庫拉取下所有數據放入 .git 文件夾,然後從中讀取最新版本的文件的拷貝。
如果進入到這個新建的“test”文件夾,發現所有的項目文件已經在裏面了,並且都被git管理起來了,直接使用即可,無需執行add和commit命令。
也可以自定義本地倉庫的名字,使用如下命令:
$ git clone https://github.com/test/test myTest
結果和上一個命令結果相同的,只是本地創建的倉庫名字變爲myTest。
Git 支持多種數據傳輸協議。上面使用的是 https:// 協議,也可以使用 git:// 協議或者使用 SSH 傳輸協議,比如 user@server:path/to/repo.git ,主要看git服務器的配置。
理解git文件的生命週期
工作區下的每一個文件分兩種狀態
已跟蹤:指那些被加入了版本控制的文件,在上一次快照中有它們的記錄,工作一段時間後,它們的狀態可能處於未修改,已修改或已放入暫存區。
未跟蹤:工作區中除已跟蹤文件以外的所有其它文件,它們既不存在於上次快照的記錄中,也沒有放入暫存區。
初次克隆某個倉庫的時候,工作目錄中的所有文件都屬於已跟蹤文件,並處於未修改狀態。