最近公司打算使用git代替之前的svn版本控制工具,趁此機會打算好好學學git,這個號稱當今世界最牛的分布式版本控制工具。
一、【git和svn的主要區別】
1、去中心化 svn以及微軟的TFS均采用中心服務器架構,即所有的提交、獲取都需要與中心服務器交互。如果開發人數較多會導致中心服務器流量壓力大,並且一旦中心服務器掛掉(之前公司使用TFS中心服務器硬盤壞掉),所有的提交記錄、穩定版本代碼等均存在丟失的風險。而git采取分布式架構,即所有開發者服務器上均存在完整的本地倉庫,則不存在這些問題。
2、本地獨立使用 使用git可以進行本地提交/撤銷,即沒有中心服務器一樣可以進行完整的版本控制;而svn則必須存在可用的中心服務器才能使用。
3、集成式提交 剛接觸git時可能對git add命令有些難以理解,因為使用svn時並沒有這一中間環節,每次進行提交時都必須對修改的文檔進行add操作會覺得麻煩。但使用習慣之后便會由心的接受這一步驟,因為它有許多的好處。當我們使用svn進行大功能開發時,每完成一個單獨的小模塊時都會很想提交,但若提交到服務器則可能會影響別的開發人員,因為該功能的開發並未完成,此時svn則無法對我們本地正在開發的代碼進行有效的控制。而使用git則可以每完成一個小步驟,就進行add提交到暫存區,並隨時可以在此基礎上進行撤銷等操作;通過集成這樣的細粒度暫存區提交,讓我們對本地倉庫進行真正提交時有更好的備注說明,以便后期對版本歷史進行追蹤。
4、便捷的分布式開發 使用git后你會發現原來在公司和在宿舍一樣開發。特別對於一些工作之余開發的個人小項目,既會在公司進行開發,亦可能在宿舍進行修改,使用git可以進行方便同步的分布式開發,即使偶爾沒有網絡。同時,使用如github/oschina這樣的免費代碼托管網站會使這一過程變得簡單自然。
5、不同存儲區域 git不同於svn將所有的版本數據都放在中心服務器【遠程倉庫】,而在本地也存在所有提交的版本數據【本地倉庫】,並且還存在一個【暫存區】版本存儲區域,它可以在未正式提交到【本地倉庫】時,暫存下我們當前版本的修改【工作區的修改】。
二、【msysgit (git for windows)的安裝】
通過http://msysgit.github.io/獲取最新版本的git安裝包,其自帶git bash命令式交互與簡單的GUI交互界面。下載后傻瓜式安裝,根據提示進行選擇性安裝,若不習慣使用msysgit自帶的GUI,可以選擇不加入右鍵菜單。習慣windows交互界面的可自行安裝source tree,通用的git客戶端界面管理工具。
三、【git bash基礎命令】
安裝好msysgit后,使用window自帶資源文件管理器進入需要進行版本控制的目錄,就可以正式開始使用git對咱們的項目進行版本控制了。下面按照一般使用順序介紹git bash日常使用中會用到一些命令:
- git config --global user.name "your name" 設置全局提交代碼人的名稱
- git config --global user.email "your email" 設置全局提交代碼人的郵件地址
- git init 將當前目錄初始化為git倉庫 (成功初始化git倉庫后會在當前目錄生成.git隱藏文件夾,里面存放了版本數據以及各種git配置數據,並會將當前目錄、所屬子目錄納入版本控制范圍)
- git status 查看當前git倉庫代碼/文件的狀態,在每次提交時都可以使用該命令查看修改狀態
- git add . 添加當前目錄所有文件到暫存區 (暫時忽略已添加的多余的文件)
- git commit -m "提交說明" 提交到本地倉庫的備注,以便后期進行版本追蹤
到此為止,第一次初始化git倉庫並向其提交一次修改就結束了。當然這只是一個順利的開始,但我們在實際工作中可能會遇到更多的問題,比如撤銷、比較、推送、獲取等,在此就不能根據順序一一介紹了。常用的操作命令請參見附錄。
四、【git bash使用代碼比較/合並工具Beyond Compare】
在git日常使用中,我們難免會在提交前、審核代碼時,比較本次提交代碼的具體修改。使用git diff命令只能在當前命令窗口查看,並不能很好的體現代碼的具體修改。而相信使用過文本比較工具如 Beyond Compare的童鞋都會更想使用友好的第三方專業文本比較工具來進行這項工作。
下面簡單介紹如何配置git使用Beyond Compare 4來進行代碼比較與合並,其中Beyond Compare 4的路徑為默認安裝路徑:
在配置了git全局代碼提交人名稱之后,git會自動將其配置存放在當【系統前用戶目錄】下的.gitconfig文件中,而我們只需要打開這個文件,並在其中追加文本:
[diff] tool = bc4 [difftool] prompt = false [difftool "bc4"] cmd = "\"c:/program files (x86)/beyond compare 4/bcomp.exe\" \"$LOCAL\" \"$REMOTE\"" [merge] tool = bc [mergetool] prompt = false [mergetool "bc4"] cmd = "\"c:/program files (x86)/beyond compare 4/bcomp.exe\" \"$LOCAL\" \"$REMOTE\" \"$BASE\" \"$MERGED\""
現在,我們便可以在提交代碼前,使用命令git difftool來對工作區和暫存區的代碼進行友好的比較了。
由於時間關系,本文先介紹到此,若有機會將后續將分享使用git進行團隊開發中的一些問題與解決方案
五、【附錄】常用git命令
初始化:
git clone 遠端倉庫地址 (克隆遠端項目)
git init (將當前路徑設為git倉庫)
git config --global core.excludesfile "file" (配置全局忽略文件)
git config -l (查看全局配置)
提交修改到暫存區:
git add . (將當前路徑所有文檔添加到暫存區, 初始化倉庫時使用)
git add -A (推薦使用, 將所有新增、修改和刪除的進行標記)
撤銷暫存區修改
git reset <HEAD> fileName (丟棄[暫存區]的修改)
git reset . 取消所有add文件(丟棄暫存區的修改)
git reset --hard commit_id
撤銷工作區修改
git checkout -- file (丟棄[工作區]的修改)
git checkout . 撤銷所有工作區修改
刪除暫存區文件
git rm --cached <file> add之后, 取消add部分文件
比較(使用比較工具)
git difftool 比較當前工作區與暫存區之間的區別
git difftool <版本號1> <版本號2> <file> 比較文檔不同版本號
查看歷史
git log <file> 查看某文檔的歷史版本(之后按end光標跳到最后,s鍵生成log記錄文檔,q退出)
分支操作:
git branch 分支名 (創建分支)
git checkout 分支名 (切換到分支)
git checkout -b "name" 創建並切換至分支
其他
git push 遠端名 分支名 (將本地當前分支推送到遠端)
git pull --rebase origin master(將本地origin/master同步到最新)
