Git+IntellijIDE是當前最流行的開發工具組合,相信用過的人都體會到了他們的強大和易用。下面就對使用該工具接近一年,寫一個總結,以備後來者學習和借鑑。java
首先,安裝git和IDE工具,以及搭建git服務器,不在本次總結以內。假定,以上已經配置完整。git
1.1 打開Git Bash,輸入ssh-keygen -t rsa運行命令,按提示設置安裝目錄及密碼,按enter鍵安裝在默認目錄(一般爲C:\Documents and Settings\username\.ssh\ 或者 C:\Users\username\.ssh)。key密碼爲空。注意,過程當中不要更名字,使用默認就能夠。bash
1.2 到默認路徑下面去找.ssh文件夾裏面的id_rsa和id_rsa.pub文件。id_rsa.pub裏面就是生成的SSH key。服務器
1.3 將id_rsa.pub文件發給GIT管理員網絡
git config --global user.name "xxx"ssh
git config --global user.email "xxx@gmail.com"函數
git config –list工具
打開IDE,以下圖,點擊git,學習
輸入git的地址開發工具
若是須要修改遠端地址,在項目根目錄,運行git bash 命令
git remote set-url origin git@192.168.0.158:java/sps.git git remote -v
使用git 和其餘的vcs版本管理工具同樣,天天上班先git pull,下班commit的習慣。而且每次commit以前,最好作一下git pull,這樣產生的衝突會比較少。
下面就以平常最經常使用的命令,來討論。
這個主要注意,從遠端下載代碼和本地衝突的狀況,若是產生衝突,必定要仔細解決,避免誤刪別人的代碼,其餘的解決衝突都要遵循此原則:切記刪除別人的代碼。
及時commit本地修改,到本地版本庫,避免失誤刪除作的工做。Commit以前,必定記得pull一下遠端分支,減小衝突。
若是遇到衝突,選擇手動合併,對衝突文件進行修改,而後git add進去,commit會繼續進行。
例如:
在Git merge中沒有提到,若是沒有衝突纔會自動合併,不然將會提出哪些文件產生了衝突。產生衝突的緣由是由於有多個開發人員修改了同一個文件的相同地方致使,使得Git系統不知道使用誰的代碼,此時就須要開發人員本身來抉擇,選擇其中一份代碼,而且將其餘的代碼刪除。
假設研發-A和研發-B兩位同事同時開發網絡聊天功能,所以,他們同時修改了Chat.java文件的eat函數。研發-A首先提交了代碼到線上的版本控制系統,而後研發-B此時從線上系統更新代碼下來,此時就會產生衝突。固然,在不一樣分支之間切換開發也可能致使發生衝突,或者說只要是代碼合併的操做都有可能出現衝突,緣由也是同時修改了文件中的同一處代碼段。例如Chat.java的原始代碼爲:
public class Chat { public static void main(String[] args) { System.out.println("Chat with me"); } }
研發-A在master分支上修改了Chat.java的main函數的第一行代碼,代碼以下:
public class Chat { public static void main(String[] args) { System.out.println("Chat with me, I'm RD-A."); } }
研發-B在net分支也修改了一樣的地方,代碼以下:
public class Chat { public static void main(String[] args) { System.out.println("我和研發-A的代碼不同."); } }
此時,研發-B提交代碼到線上系統以後,研發-A將net分支代碼同步到本地,而且將net分支經過Git merge合併到master分支。此時就會引起衝突,如圖8-16所示。
圖8-16 產生衝突
從圖8-16中能夠看到,圖中指出自動合併失敗,Chat.java產生了衝突。咱們看看此時Chat.java文件中的內容是怎樣的:
public class Chat { public static void main(String[] args) { <<<<<<< HEAD System.out.println("Chat with me, I'm RD-A."); ======= System.out.println("我和研發-A的代碼不同."); >>>>>>> net } }
其實很容易看懂這份衝突的文件,它的意思是,在System.out.println()語句這裏出現了多份代碼,Git不知道如何解決。在咱們的示例中,在「<<<<<<< HEAD」與「=======」之間的是研發-A的master分支的代碼,而「=======」與「>>>>>>> net」則是研發-B的net分支中的代碼。這兩份代碼到底要哪一份,這須要你來裁決,所以,給出了衝突提示。假設研發-A的代碼是正確的,那麼須要將「=======」與「>>>>>>> net」之間的代碼刪除,而且將「<<<<<<< HEAD」、「=======」、「>>>>>>> net」這些衝突標識也刪除。最終代碼以下:
public class Chat { public static void main(String[] args) { System.out.println("Chat with me, I'm RD-A."); } }
此時,衝突就已經被處理了。從新Git add和commit提交代碼便可。
該功能至關好用,能夠將本地修改,stash暫存本地工做環境,作其餘的操做(修復主分支的bug),完成以後,在unstash恢復本地工做環境
屢次commit完成以後,須要將本地倉庫同步到遠程倉庫,供團隊其餘成員使用。通常使用以下配置推送,
其中,push爲默認選擇,推送到遠程,進行同步,force push 爲強制本地版本覆蓋遠端版本,push tags將本地的tag push 到遠端,這些操做都對應git bash中的命令,有興趣能夠本身查閱。
該命令是將其餘分支的提交合併到當前分支,通常使用以下配置便可,
本地當前在dev 分支,這個操做是將master分支的全部提交merge到本地dev上,合併策略通常默認便可。
git pull –tags git push –tags git tag –d tag1.0