1. 程式人生 > >Git篇--快速團隊開發

Git篇--快速團隊開發

本人是一所本科院校大三學生,在校有自己的學生團隊,在專案開發中,為了提高開發效率,採用了Git技術。現總結下git,歡迎大家互相交流。

在學習git之前,我們先來了解一下git的一些基本概念

1.git工作流程見下圖

這裡寫圖片描述

2.一些基本概念

  • .git目錄:使用git init初始化一個git倉庫時會生成.git隱藏目錄,裡面儲存的是整個專案的檔案改變記錄等資訊。
  • 工作區:可以理解為本地的git倉庫所在的目錄也就是專案目錄。
  • 暫存區:所有通過git add命令新增的檔案都儲存在暫存區,其實就是.git目錄下面的index索引檔案中。
  • 版本庫:也就是整個git倉庫。
  • 三者的關係:工作區就是你的開發目錄,所有的檔案編輯通過git add新增到暫存區,然後通過git commit命令提交到本地git倉庫,然後通過git push推送到遠端git倉庫。

常規的git倉庫結構如下

[email protected]:user/project_name.git
|-master (主分支,和線上程式碼同步)
|-develop(開發分支,功能開發完成後先合併到develop,然後再講develop合併到master)
|-feature(臨時性分支(功能分支),比如開發某個功能可以新建一個feature分支,完成後將feature分支合併到develop)
|——— feature/update_online_pay_api
|——— feature/add_new_feature..
|——— …
|-release(臨時性分支(預發分支),開發完成提測,新建release分支進行測試,完成後合併進master和develop)
|——— release/update_online_pay_api
|——— …
|-hotfix(臨時性分支(熱修改分支),一般用於緊急修改bug等短期任務時建立的分支,修改完成後合併到master和develop) |——— hotfix/handler_pay_bug
|——— …

關於分支命名規則:見名知意,臨時性分支可以使用’/’分隔,也可以使用’-‘分隔等,沒有強制要求.

當你接到一個產品需求,開始著手開發的時候,git流程是這樣的:

首先你需要把遠端git倉庫中的專案同步到你本地,流程如下:

cd ~/workspace/git/ // 進入你個人的工作目錄
mkdir project_name // 新建一個目錄用於存放程式碼,名稱可以和遠端倉庫名稱一樣
cd project_name // 進入你新建的目錄
git init // 使用git初始化這個目錄為一個git倉庫
git remote add origin [email protected].com:22
th/oh-my-zsh.git // 關聯本地倉庫到一個遠端倉庫 git fetch --depth=1 // 更新遠端倉庫的一些資訊到本地,比如分支資訊等 git checkout -b master origin/master // 檢出一個分支master並關聯遠端的master分支 git pull // 更新本地倉庫程式碼

通過以上流程就可以將遠端專案同步到本地,現在預設的是遠端的master分支,你不可以在master分支修改程式碼,一般來說你也沒有這個許可權。 同步程式碼到本地之後,你需要根據業務需求,新建一個開發分支,名稱更具你的需求來調整,比如你要開發一個新功能,那你就建一個feature-xxx分支,如果你是解決一個bug,你可以建一個hotfix-xxx分支。新建分支不建議從本地建,你應該從git倉庫管理後臺新建,然後再檢出到本地。管理後臺新建分支很簡單,不說了。
然後你就將你新建的分支check到本地,命令如下:git checkout -b feature-xxx origin/feature-xxx

接下來就是你愉快的開發過程,在你自己的分支上開發,測試,然後提交,會用到的git命令如下:

git add <file> // 將工作區修改新增到暫存區,加上 --all 引數表示將所有修改新增到暫存區
git commit -m “msg” // 將暫存區的修改新增到版本庫
git push -u origin feature-xxx // 將本地倉庫中的修改推送到遠端
git status // 檢視當前工作區間狀態
git log // 檢視歷史commit
git checkout -- <file> // 用最後一次commit的檔案替換當前工作區間的檔案
git reset --hard // 丟棄工作區間所有修改,回滾到上一個commit狀態
git checkout <版本號> // 回滾到指定版本

功能開發玩,就需要提測併發布到線上了,流程如下

1、在git倉庫管理後臺新建release-xxx分支,基於你的feature-xxx分支,主要用於測試。

2、release-xxx測試OK之後,就可以將其merge到master和develop分支,一般是通過git倉庫管理後臺提交merge request,等待相關管理人員確認後合併到master,提交merge request之前,先merge一下master分支,保證master上新修改的程式碼和你同步。合併master的時候可能會產生衝突,找到衝突檔案,解決並commit。衝突格式如下:

<<<<<<< HEAD
ln -s ../statics xxx
=======
ln -s ../statics statics
>>>>>>> master

其中 «««< HEAD 和 ======= 之間的內容表示是你分支中程式碼,而 ======= 和 »»»> master 表示的是master分支中的程式碼。那麼手動解決衝突的過程就是確認你要保留的程式碼,把其他的刪除,也就是說如果你要保留你本地的程式碼,那麼就是這樣的:

<<<<<<< HEAD (刪除)
ln -s ../statics xxx (保留)
======= (刪除)
ln -s ../statics statics (刪除)
>>>>>>> master (刪除)

保留 «««< HEAD 和 ======= 中間的程式碼就OK,解決掉所有的衝突後git commit -am “解決衝突”
3、好了,其他的工作就是運維人員來處理了。一般是這樣的,release-xxx分支測試完成並解決所有衝突後,運維釋出人員merge到master分支,然後通過 git diff 608e120 4abe32e --name-only | xargs zip update.zip 命令打包差異檔案,然後釋出這個差異檔案包就可以啦,不需要所有檔案都覆蓋線上檔案。

到這裡,整個git專案開發流程就已經非常清楚了。git還有很多高階功能,比如檔案對比、檔案歷史修改記錄、關聯多個遠端倉庫等等需要你慢慢去摸索了。使用git要靈活運用分支,因為git新建切換分支的成本非常低,因為git新建分支不是想svn那樣吧整個目錄複製一遍,然後通過索引檔案等更高階的方式來處理,效率高太多。

在推薦個git圖形化管理工具:
source tree, mac和windows都有。

If you liked this article and think others should read it, please follow webff