Git 入門知識(與SVN對比)
目前我們遇到的問題有三個:
1. 將專案程式碼從svn遷移到git(一個專案只需要一個人做就可以了)
2. Git的安裝與配置。(從一臺沒有安裝過git的機器,到我們可以使用。每個人只需要配置一次。)
3. 就是我們使用git管理我們的程式碼。(重點)
Git簡單介紹:git是一款免費的、開源的分散式版本管理控制系統(工具)。和SVN一樣,都是管理我們程式碼文件用的。
Git比SVN相比有什麼區別呢?
1. 最核心的區別就是Git是分散式的, SVN是集中式的。SVN必須有一個伺服器版本庫就放在一箇中央伺服器。所有開發人員都是與伺服器進行互動的。(一般的開發流程就是幹活時候從中央伺服器得到最新的版本,然後幹活,幹完後需藥把自己做的工作推送到中央伺服器。
Git不需要有中心伺服器,我們每臺電腦擁有的東西都是一樣的。我們使用Git並且有個中心伺服器,僅僅是為了方便交換大家的修改,但是這個伺服器的地位和我們每個人的PC是一樣的。我們可以把它當做一個開發者的pc就可以就是為了大家程式碼容易交流不關機用的。沒有它大家一樣可以工作,只不過“交換”修改不方便而已。(所以git的開發流程是工作的時候不需要聯網了,因為版本庫就在你的電腦上。比如你在自己的電腦上修改了檔案A,你同事也在她的電腦上修改了檔案A,這時,你們之間只需要把自己的修改推送給對方。就可以看到了對方的修改了。)
Git更傾向於分散式開發,每臺計算機上都有一個完整的本地版本庫。和伺服器上的一模一樣。
去中心化有什麼好處呢?
1.1操作處理速度快。
在Git中的絕大多數操作都是訪問的本地檔案和資源,不必聯網就可以看到所有的歷史版本記錄,所以,處理起來速度也是飛快的。而SVN必須聯網從中心伺服器上下載下來資料才可以看到。
1.3 安全性更高。因為每個人的電腦都有完整的版本庫,所以某一個電腦壞掉了不要緊,隨便從其他人哪裡複製一個就可以了。而SVN集中式版本控制的中央伺服器要是出了問題,所有人都沒法幹活了。
1.2 不依賴網路。
SVN斷開網路就沒有commit程式碼。但是Git可以先Commit到本地倉庫。使用SVN在沒有網路的情況下,當然可以繼續本地開發,但是不能commit程式碼,長時間不commit
(svn的commit速度慢,但git是提交到本地,幾乎不佔用時間。)
說到這裡,我們就先說一下svn和git的commit的不同。
在SVN中當你提交程式碼時候,它將直接記錄到(同步)中心版本庫,當你發現你的程式碼有嚴重的問題是,你已經無法阻止事情的發生了。
在git 中完全不是這樣的,commit相當於你將你的程式碼提交到本地的版本庫裡了,只需“推”到(git push)主要的版本庫即可。相當於commit提交到本地,然後push其實執行的同步(Sync)操作。兩步操作。不至於馬上影響到所有的開發人員。
就算沒有網路也可以進行,Commit,檢視歷史記錄,建立分支,合併等操作,等到網路再次連線上就Push到Server端。
2. 分支功能:
Svn 建立分支,其實就是建立了一個新的資料夾(目錄)並擁有實際的檔案的。相當於拷貝了一份原始檔。如果一個成員建立了一個分支,將會影響所有的人。那麼所有的人都將擁有同樣的分支。
Git建立分支,並沒有建立資料夾,你甚至看不到任何的改變。使用者可以在同一個資料夾中,快速的切換不同的分支。建立一個分支,就是多了一個索引檔案,記錄這個分支的變化。佔用很小的空間。
每個分支,都是獨立的,在這個分支裡想做什麼都可以,對其他分支沒有一點影響。
既然這樣,大家就應該能想象得到。一個svn專案建立了幾個分支,就相當於把原始碼複製拷貝了多少次。而git專案建立幾個分支,僅僅是多了幾個索引,佔用很小的空間。所以在git管理專案中,我們可以建立任意多的分支,(開支小)。
所以,clone新的專案的時候,git也比svn專案快的太多了。
3. Git具開發程式碼稽核功能,各個成員請求將自己的分支合併到主分支上。管理人員對認為不符合規範的程式碼,會拒絕合併到主分支。保證整體程式碼的規範與安全。
Git工作流程
那我們說過工作流了,就具體務實一點,我們具體該怎麼做。
1. 安裝配置好git(就是發給大家的資料,大家按照一般就是沒問題的)
2. 在你的pc上的任意位置,執行git clone url命令,將遠端版本庫下載到本地。這樣你本地就擁有了和中心伺服器一樣的本庫。
3. 日常會碰到的場景
3.1建立了一個新檔案,需要新增到版本庫裡使用git add filename命令,我想儲存一下,使用git commit -m ..... 我想把我改變的推送給其他人(伺服器)git push -u origin master(提交程式碼)。
3.2我想把別人改變的程式碼拉去過來,git pull.
3.3原來的有個檔案,想刪除了,使用git rm file(會將檔案從暫存區與磁碟上刪除)
3.4
3.5我已經將更改的內容提交到暫存區了,但是我發現提交的程式碼有問題,想恢復做出修改之前的樣子git reset HEAD(取消快取區的內容)
4. 新收到一個任務,我想建立一個分支
(後續更新)