Git管理工具對照(GitBash、EGit、SourceTree)git
GitBash是採用命令行的方式對版本號進行管理,功能最爲靈活強大,但是因爲需要手動輸入但願改動的文件名稱,因此相對繁瑣。緩存
EGit是Eclipse的Git插件,最爲糾結的一個軟件,因爲開發時直操做很是方便,尤爲是有svn開發情節的人更熱衷於這樣,只是EGit中有很是多bug和不人性化的東西,讓人吐血,因此eclipse
一句話EGit並不能解決所有Git問題,開發時必須部分依賴於其它Git管理工具。一會一一列舉。jsp
SourceTree是近期應用的一個軟件,一句話歸納,既有GitBash的命令行,又有EGit的圖形化管理,用戶界面很是人性化,Eclipse+GitBash全然可以應付版本號管理。svn
那麼如下我結合項目中開發遇到的問題一一解說一下:工具
<一>EGit之我見:spa
EGit最大的優勢是集成在eclipse裏面,對於代碼改動後提交很是方便,當中我最常使用的部分是:.net
(1)簡單的Commit,pull,push。插件
(2)Git repository(看資源庫視圖)(包含新建分支,切分支,合併分支)命令行
(3)projectreset hard(強制覆蓋本地版本號),一些特殊狀況會有問題。
(4)projectcheckout到某一個分支,可以看當時的文件。
(5)projectshow in history (查看project變動歷史),沒有時分秒,很是不爽。
其它的功能我用的很少,因爲EGit確實有很是多bug,犯過血淋淋的錯誤。
這裏解釋一下,爲何第一條我要加上」簡單的」,因爲很是多時候沒有pull下來,或者沒有push上去,提示的信息很是粗,有時候甚至誤覺得提交,發現過很是多問題,因此假設肯定現在沒人和你同一時候改同一個文件,用EGit仍是很是爽的。
<二>GitBash之我見:
通常我主要經過命令行進行pull push 還有 status的操做,這個詳見我前一篇文章
《Git Bash+EGit在項目中配合使用最常常用法總結》,命令行用好了很是是很是不錯的,除了那種需要手寫文件名稱的時候,比較不爽,一兩個還可以,多了就吐血了。
<三>SourceTree之我見:
這個是我近期才發現了一個很是好的工具SourceTree,可以說SourceTree是EGit和GitBash的合體,既有圖形化界面又有git命令行。
(1)主要的commit、pull、push都擁有,而且一旦錯誤發生的時候提示很是準確。
(2)主要的分支管理業有,最挫的Egit刪除遠程分支是假刪除,SourceTree完美攻克了這個問題。
(3)擁有EGit中的reset(重置)和checkout(簽出)兩大功能,而且更加穩定。最令我懷疑的EGit的reset hard也有報錯的時候,哎。SourceTree仍是很是穩定的。
(4) 那麼近期用SourceTree,發現了一個很是強大的功能,就是「丟棄」這個功能,和checkout事實上原理是同樣的。只是圖形化界面確定比較方便了。這裏具體解釋一下這個功能:
換句話說,你改了一批文件,假設想提交一部分,保留一部分,無疑命令行最麻煩。
而後你不知足,當中有幾個文件你還想回滾,不想改了。那麼SourceTree最easy。
這裏需要注意一下命令行中checkout 是指未add的,那麼可以回滾到近期的線上的commit狀態。假設add以後又改動,那麼會回滾到add以後的狀態。
這一個原理,在Source體現的更明顯,例如如下:
A. 首先我先將改動後的personRiskBase.jsp拖到緩存區中(1)。
圖(1)
B. 而後再次改動,發現如下的工做區中也有這個頁面了(圖2)。
(圖2)
C. 現在就可以對此文件進行丟棄了,假設將如下文件丟棄(checkout),那麼該文件將變爲緩衝區中的文件,假設將緩衝區文件丟棄,實際上回到了近期的commit版本號了(reset操做)。
這裏注意,假設該文件commit了,那麼checkout實際上回不到commit以前的版本號的,需要reset。如下具體介紹一下reset命令。
(5) 對於reset功能的應用。這裏先普及一下Git理念的事:
A. 明白一點,每一次commit都是相應着一批操做而不是相應一個文件。
這點和SVN的設計理念全然不同。
這也形成了一個一定的結局:SVN的分支存的是一個project,因此每簽出一個分支實際上都是簽出一個project。
而Git的分支存的是改動的記錄,因此每簽出一個分支,實際上都是對原project的一次覆蓋。
B.在開發過程當中你們可能會遇到這樣一個問題:Pull以後,會出現很是多別人提交的代碼需要你本地再又一次提交一次,那麼這個緣由是這種,固然這個是我我的的理解:Git會把每一次pull結果作兩個處理:
B1.假設pull以後,本地沒有不論什麼問題,那麼不需要再次提交別人改動的東西了,僅僅需要繼續你的改動,push就可以了(正常狀況下一版都是這樣)。
B2.假設pull以後,本地有問題,大部分狀況是衝突的狀況,那麼Git會把本次當作一次不成功的pull(那麼通俗的來說,git會以爲,你以爲不成功,那麼你把此次版本號依照你的想法改一下,再提交吧),因此你作完刪減以後,需要把剛纔別人的東西再提一次做爲一個新的commit。
(6) 對於checkout某一次提交,SourceTree也很是人性化,會給出很是人性化的提示。注意checkout以後,你的project當前不屬於不論什麼分支,只是可以基於此又一次建立一個分支,很是方便。
總結一下:這裏僅僅列出了一些關鍵的問題和不一樣點,固然工具的選擇因人而異。你們可以在工做中慢慢體會,假設有問題歡迎你們提出,給我寶貴的意見。(待續)