前言
git是一個開源的分散式版本控制系統,用於敏捷高效地處理任何或小或大的專案,是團隊協作開發的必備技能,下圖是git的工作流程。
![git工作流程](https://i.iter01.com/images/71b40411266378e5b53cff09c908d4e57a8bcbb7b173355cc3d91a332abb38e5.png)
註冊
- gitlab:gitlab.com
- github:github.com
- osc:gitee.com
下面以gitlab為例,註冊好賬號後,新建專案,命名為test_git。
![gitlab新建專案](https://i.iter01.com/images/343a858fc22dd605a9300aebd54730c79e119531ce9fc1d28d7358bbe36ad854.png)
![gitlab新建專案2](https://i.iter01.com/images/1fbd8b40af604145618dca4817200fdb23e2d02f341d15b6f83e341b2cb07141.png)
下面請準備兩臺電腦,沒有兩臺電腦可以用虛擬機器代替
A和B電腦都安裝Git
-
Windows:
進入git-scm.com下載安裝,安裝時全部點下一步即可。
-
Linux(Ubuntu):
apt install git 複製程式碼
-
Linux(Centos):
yum install git 複製程式碼
-
Mac:
brew install git 複製程式碼
設定git的提交郵箱和提交使用者名稱(這步不能漏,不設定郵箱和使用者名稱是無法提交的),執行命令:
git config --global user.email "you@example.com"
git config --global user.name "your name"
複製程式碼
這個郵箱和使用者名稱只是你提交到git遠端上顯示出來的,可以隨便填寫,並不需要和你的gitlab郵箱和使用者名稱保持一致,但建議保持一致。
A和B電腦都配置SSH-Key
配置ssh-key,簡單來說就是git本地和git遠端通過金鑰關聯起來,不用每次推送和拉取都輸入密碼,而且還是加密傳輸。
1. 本地配置
命令列輸入(Windows的開啟安裝好的git.exe輸入命令):
ssh-keygen -t rsa -C "你的郵箱地址"
複製程式碼
一路回車,生成ssh金鑰。
-
Windows: 開啟c:/使用者/自己的使用者名稱/.ssh,找到id_rsa.pub這個檔案,用記事本開啟。
-
Linux/Mac: 開啟~/.ssh,找到id_rsa.pub這個檔案,用文字編輯器開啟。(Linux可能找不到.ssh資料夾,因為這是隱藏的資料夾,按Ctrl + H即可顯示出)
2. 遠端配置
登入gitlab,開啟Settings -> SSH Keys,把檔案id_rsa.pub的內容複製到Key輸入框中,再編寫Title輸入框,title一般寫id_rsa.pub裡的那個郵箱(A和B兩臺電腦就需要新增兩個ssh-key,title可以相同)。
![gitlab配置ssh-key](https://i.iter01.com/images/a902d1767b86618d02305e981450d7384aeefc7d73ec211e07952540986ed3f9.png)
![gitlab配置ssh-key2](https://i.iter01.com/images/efd070d2903cc2f17aeda5ee51f80982f0622b286e4474c1637e39fd23e19148.png)
![gitlab配置ssh-key3](https://i.iter01.com/images/495037d444fe695da873ba0f8d01a5142b798f0713eb8ef5c3870a3ce01bdae9.png)
A電腦初始化專案
新建資料夾test_git,進入test_git資料夾,新建檔案test.txt,寫入一行A init,
![A電腦初始化專案-檔案內容](https://i.iter01.com/images/ff40cd62525acfee77d5cc2ae8e5fd0f9f2c6ea384b53aaad5b32ac44ccf4f5c.png)
在test_git資料夾下執行以下命令:
git init
git remote add origin git@gitlab.com:chunjie/test_git.git
git add .
git commit -m "first commit"
git push -u origin master
複製程式碼
git遠端地址換成你的:
![git遠端地址](https://i.iter01.com/images/f6f6fccb4c325ff268ae19f4a7a4adfa209481be315574af7ddfa07657e2f972.png)
在gitlab上專案裡新建develop遠端分支:
![gitlab新建develop遠端分支](https://i.iter01.com/images/924fd104bbf28cc75a754aebf6bd66bc9891584e6fab434a3963436e97cc25e9.png)
![gitlab新建develop遠端分支2](https://i.iter01.com/images/1bf856bf32e98250d218645d3bd2bf75a1d77f0999f2153cbb6d657ec025a17b.png)
A電腦操作1
在test_git資料夾下,新建並切換到develop本地分支,即執行命令:
git checkout -b develop
複製程式碼
修改test.txt檔案,在最後新增一行A develop add 1,
![A電腦操作1-檔案內容](https://i.iter01.com/images/432e9087b4a604c3bff706e286c2c9487bf25f74bc6c59f37ba8d0c8c657ab8e.png)
在test_git資料夾下執行命令:
git add .
git commit -m "A develop add 1"
git push origin develop
複製程式碼
B電腦操作1
在一個檔案目錄下克隆專案,進入test_git檔案目錄,新建並切換到develop本地分支,拉取最新的develop遠端分支,即在test_git目錄下執行命令:
git clone git@gitlab.com:chunjie/test_git.git
git checkout -b develop
git pull origin develop
複製程式碼
開啟檢視test.txt檔案,
![B電腦操作1-檔案內容](https://i.iter01.com/images/514305c8a5116ab803e3bca451213e1e5c6ec79750a513750bc6bfe960dd1c9b.png)
修改test.txt檔案,在最後新增一行B develop add 1,
![B電腦操作1-檔案內容2](https://i.iter01.com/images/a22295c42807873bba76fa83609726be08e3cf767d4a9724730afae99618ad02.png)
在test_git目錄下執行命令:
git add .
git commit –m "B develop add 1"
git push origin develop
複製程式碼
A電腦操作2
修改test.txt檔案,在最後新增一行A develop add 2,
![A電腦操作2-檔案內容](https://i.iter01.com/images/3840ab34936ceca9086928c4be18f0ba151df0d31e2eca27e47e503dd8a027fc.png)
在test_git資料夾下執行命令:
git add .
git commit -m "A develop add 2"
git pull origin develop
複製程式碼
發現提示衝突了,
![A電腦操作2-提示衝突](https://i.iter01.com/images/f5d74d97b001400093603d0a7ce2b8d66b7f63c96f381ea05f14c7f9768c71d6.png)
根據提示是test.txt檔案衝突,因為剛才B電腦也在最後新增了一行B develop add 1,所以需要解決衝突,開啟test.txt檔案,
![A電腦操作2-衝突檔案](https://i.iter01.com/images/baaea028870ede8950cee41736c3a6ac6022bff8873444c531db71f09f8d3166.png)
根據實際情況編輯好test.txt,這裡是再新增一行,即在B develop add 1後再新增一行A develop add 2,
![A電腦操作2-解決衝突](https://i.iter01.com/images/462c12ec0949fd6ad1e724b84334644ca1f17016e964c1cf4b50cbf0793e63cf.png)
然後在test_git資料夾下執行命令:
git add .
git commit -m "解決衝突"
git pull origin develop
git push origin develop
複製程式碼
B電腦操作2
拉取最新的develop遠端分支,即在test_git資料夾下執行命令:
git pull origin develop
複製程式碼
發現test.txt檔案變成了最後新增兩行B develop add 1和A develop add 2。
![B電腦操作2-檔案內容](https://i.iter01.com/images/9836580b594b59c228ee7938aa32d436ee5ccb03590335c09efacd6230ed430e.png)
知識點
-
有時執行git push命令會提示拒絕提交,是因為有人比你先提交了,你需要先git pull,再git push,所以每次git push前都先git pull一下。
git pull origin develop git push origin develop 複製程式碼
-
平時要多用git status這個命令,隨時檢視當前git的狀態。
git status 複製程式碼
-
專案中通常需要在根目錄下新增.gitignore檔案,作用是可以忽略指定檔案不提交。 例如:java專案通常可以這樣書寫.gitignore檔案:
*.iml /.idea/ /bin/ /log/ /logs/ /src/test/ /target/ /.apt_generated/ /.settings/ /.classpath /.project /.factorypath /.springBeans /.DS_Store 複製程式碼
-
可以劃分為master、develop、test三個分支,遠端分支和本地分支保持一致,平時在develop分支下開發,完成階段性的內容就把develop分支合併到master分支,master分支要保證是正常的,需要測試就把develop分支合併到test分支,發一次版就增加一個分支release_版本號,把develop分支合併進去。 例如:要把develop分支合併到master分支,就要先切換到master分支,再把develop分支合併到master分支,檢查master分支沒事後,再切換回develop分支進行開發,即執行命令:
git checkout master git merge develop git checkout develop 複製程式碼
補充
發現不少人會問怎樣算解決完衝突,其實怎樣算解決完衝突是由你決定的,你覺得是解決完了就是解決完了,總之你開啟有衝突的檔案進行編輯,你覺得修改好了就是解決完衝突了,然後就可以add-commit-push了,為了減少處理衝突,每完成一個小功能就馬上提交。
ps:發現造成這個疑問往往是使用eclipse用git介面操作時造成的,建議用命令列操作,不要用介面操作。
總結
git常用的命令:
檢視當前的狀態:git status
克隆專案:git clone 遠端地址
新增當前目錄下所有檔案到本地當前分支:git add .
新增指定檔案到本地當前分支:git add 檔案路徑
提交到本地當前分支:git commit -m "提交的內容"
從遠端分支拉取到本地當前分支:git pull origin 遠端分支名
把本地當前分支推送到遠端分支:git push origin 遠端分支名
切換到不存在的本地分支:git checkout -b 本地分支名
切換到已存在的本地分支:git checkout 本地分支名
合併本地指定分支到本地當前分支:git merge 本地分支名
合併遠端指定分支到本地當前分支:git merge origin/遠端分支名
個人微信公眾號
微信公眾號id:chunjie_tech
![純潔的技術分享](https://i.iter01.com/images/6881ae320928d1caa69dd778a34576d6069ef9c2f78f23a757ce9fe4df2afb49.jpg)