1. 程式人生 > >E哥的Git教程(五)公司程式碼提交流程

E哥的Git教程(五)公司程式碼提交流程

公司程式碼提交流程

“這回我心裡有底了,只要掌握了git的這些命令,工作的效率很快能趕上來!”

看著李靖信心滿滿,躍躍欲試的樣子,E哥微笑道:“先別高興得太早,我們現在來個複雜的,也是最重要的實戰演練把。 這次你要完全按照公司的開發流程來模擬一遍。”

公司Git提交流程

E哥說完用黑板擦把白板擦乾淨,在上面開始畫起來。

company-1
”我們的開發流程是這樣的。”

”所有新加入專案的同事都從遠端倉庫clone一份程式碼到本地。 每個人把的任務做完後push到遠端倉庫。遠端倉庫的程式碼合併和維護一致性,一般由我來完成,這樣每個人只要專注於自己本地倉庫的版本控制就可以了。“

”實際的專案我們新開發的功能都會起一個新的分支, master分支只用來儲存已經驗證測試通過的分支。 例如,我們雷神的專案現在正進行2.0的開發, 我已經在遠端倉庫建立了一個分支release-2.0。大家都在本地獲取一份release-2.0,在上面進行開發和push程式碼。“

”當我們開發完成,測試沒有問題後。我會把release-2.0 合併到master,然後我們的運維兄弟就可以部署到生產環境了。這樣能保證測試完的程式碼,在生成環境也是同一份完整的。”

“還是用我們剛才的那個演示用倉庫, 現在你先用git branch –a 來檢視本地倉庫中有哪些分支:”

$ git branch -a
  feature1
  hotfix
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
  remotes/origin/release-2.0

我們雷神的專案現在正進行2.0的開發,所以我們在遠端倉庫裡新建了一個release-2.0的分支。

第一步,我們從遠端抓取release-2.0分支上最新的程式碼,以防最近有其他同事修改了程式碼:

$ git fetch origin release-2.0:release-2.0
From github.com:liyi-demo/grit
 * [new branch]      release-2.0 -> release-2.0

“這裡的 release-2.0:release-2.0 是按照 遠端分支名:本地分支名 來表示的。 這裡表示把遠端分支release-2.0 抓取到本地,為了專案統一本地分支的名字我們也叫release-2.0。”

“之前我們用的fetch命令是 git fetch origin

。 這裡多了兩個引數,有什麼區別嗎?“李靖想起來剛才用過fetch命令, E哥還推薦用pull來替代它。

“其實是一樣的,我們之前執行的命令其實應該是git fetch origin master:master , 系統預設可以省略掉後面的master:master了。”

company-2

“現在,你就可以開始在release-2.0分支進行實際的開發動作了, 例如你現在的任務是在release2.0這個版本里修復issue55這bug,那麼我們執行命令:”

$ git checkout release-2.0
error: Your local changes to the following files would be overwritten by checkout:
        README
Please, commit your changes or stash them before you can switch branches.
Aborting

“咦,好像checkout失敗了!“李靖指著螢幕上的error資訊說道。

“這是因為我們之前有操作修改了README,並沒有提交改動。 Git強制要求把所有改動都提交才能checkout到其他分支。”

”哦,是的,我記得之前E哥還提醒過我。“李靖恍然大悟道。

我們先用剛才學的git checkout -- file來強行恢復到上一個版本。

$ git checkout -- README
$ git checkout release-2.0
$ git branch iss55
$ git checkout iss55

“從release-2.0這個分支開始,建立issue55分成一個新分支進行修改。”

$ vi README

輸入文字,儲存退出。

$ git add README
$ git commit -m "commit on iss55 "

“我們現在要在本地把issue55的修改合併到release2.0上了。 在合併之前,要確認一下遠端的release-2.0是否有新的變化,因為是多人協作,這期間可能有其他同事往遠端的release2.0提交了程式碼,為了避免不必要的麻煩,使用git pull命令獲取最新的遠端release2.0以此保證最新的本地release2.0程式碼在合併時是最新的。”

$ git checkout release-2.0
$ git pull origin release-2.0
From github.com:liyi-demo/grit
 * branch            release-2.0 -> FETCH_HEAD
Already up-to-date.

從遠處的release-2.0 推送最新的程式碼到FETCH_HEAD分支,即當前分支是release2.0。 等同於 git pull origin release-2.0:release-2.0

“Ok,開始合併。”

$ git merge iss55
Updating 58a2eb1..be7aafb
Fast-forward
 README | 2 ++
 1 file changed, 2 insertions(+)

這時的狀態是這樣:
company-3

小貼士:
在公司,一般會要求提交codereview請求, 需要同事都確認code review沒有問題。

執行遠端推送:

$ git push origin release-2.0
Warning: Permanently added the RSA host key for IP address '192.30.252.128' to the list of known hosts.
Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 282 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
To [email protected]:liyi-demo/grit.git
   58a2eb1..be7aafb  release-2.0 -> release-2.0

小貼士:
如果你的電腦是第一次提交遠端合併,會提示:

Warning: Permanently added the RSA host key for IP address '192.30.252.128' to the list of known hosts.

company-5

工作指令集

李靖:“這下我心裡有底了,我下午就開始按流程開始使用git提交程式碼!”

“good,恭喜你!“E哥很開心的和還處於興奮中的李靖擊了一下掌。

“你已經完全可以使用git了, 我11點還有個會,我們今天就先到這裡。 你自己在熟悉一下剛才的命令,遇到有什麼問題,可以直接來問我。 建議你把剛才的命令記下來貼在電腦的記事本里,專案需要時安裝命令逐一執行,這樣出錯的機率就小很多!”

“好的,多謝E哥!”

看著E個匆匆離去的背影, 李靖心想還好有人在旁邊指導, 不然自己得花不知道多少時間去研究才能把這些命令搞透。 李靖熟悉了一下剛才的命令,在記事本里敲上了工作命令流程:

  1. git fetch origin release-2.0:release-2.0 //從伺服器端,取下最新的分支到本地;
  2. git checkout release-2.0 //切換到本地release2.0目錄
  3. git branch iss55 //從本地的release-2.0分支拉出子分支,做需求修改;
  4. git checkout iss55 //從本地的release-2.0分支切換到其子分支iss55上;
  5. //修改,編輯,除錯程式碼,直到功能實現;
  6. git status //檢視變動的程式碼;
  7. git add file1 file2 file3 //新增變動的修改;
  8. git commit //提交變動,並補充描述,
  9. git log -n 5 //檢視提交的日誌;
  10. git checkout release-2.0 //切換到本的主分支;
  11. git pull release-2.0 // 在把子分支的修改合併到主分支前(本地),需要先從線上將最新的分支拉下來(線上),【多人協同工作時,他人可能提交了修改】
  12. git merge iss55 // 把子分支iss55的修改合併到主分支release-2.0(本地)
  13. git push origin release-2.0 //把本地分支提交到伺服器(線上)對應分支上

相關推薦

EGit教程公司程式碼提交流程

公司程式碼提交流程 “這回我心裡有底了,只要掌握了git的這些命令,工作的效率很快能趕上來!” 看著李靖信心滿滿,躍躍欲試的樣子,E哥微笑道:“先別高興得太早,我們現在來個複雜的,也是最重要的實戰演練把。 這次你要完全按照公司的開發流程來模擬一遍。”

Python入門系列教程函數

st3 python入門 test print 缺省 .com 教程 技術 log 全局變量 修改全局變量 a=100 def test(): global a a=200 print a 多個返回值 缺省參數 d

java教程SSH框架-配置

jar 集成 相同 onf -i ret 順序 cati lin 前言:從這篇博客開始我將繼續講述Java教程:SSH篇。主要內容環繞SSH框架分析與搭建,今天先簡介一下SSH的配置。 SSH配置順序是: spring-->hibern

微信公眾平臺開發教程自定義菜單

打開鏈接 delete toolbar 推送 優化 pcl reader 接口查詢 robot 應大家強烈要求,將自定義菜單功能課程提前。 一、概述: 如果只有輸入框,可能太簡單,感覺像命令行。自定義菜單,給我們提供了很大的靈活性,更符合用戶的操作習慣。在一個小小的微信對話

Git 教程:時光穿梭

rac call 替換 img posit key 誤刪 ranch 定位在 我們已經成功地添加並提交了一個readme.txt文件,現在,是時候繼續工作了,於是,我們繼續修改readme.txt文件,改成如下內容: Git is a distributed version

Git 教程:倉庫與分支

ide 不但 clas version span 右上角 director discard pre 遠程倉庫 到目前為止,我們已經掌握了如何在Git倉庫裏對一個文件進行時光穿梭,你再也不用擔心文件備份或者丟失的問題了。 可是有用過集中式版本控制系統SVN的童鞋會站出來說,這

python基礎教程

() 文件名 nal cnblogs 文件 求長 元素 fin 查詢 字符串基本操作   所有標準的序列操作(索引、分片、乘法、判斷成員資格、求長度、取最小值和最大值)對字符串同樣適用,前面已經講述的這些操作。但是,請註意字符串都是不可變的。 字符串的方法: 字符串從s

JXLS 2.4.0系列教程——更進一步的應用和bug修復

erl dir 問題 create sna 過程 idl es2017 cal 註:本文代碼建立於前面寫的代碼。不過不看也不要緊。   前面的文章把JXLS 2.4.0 的基本使用寫了一遍,現在講講一些更進一步的使用方法。我只寫一些我用到過的方法,更多的高級使用方法請參

Spring Boot參考教程Spring Boot配置使用之配置類用法

expr web程序 成功 驗證 pan hub parameter lan fix 4.2. SpringBoot配置使用之配置類使用 Spring Boot的大部分自動配置都可以滿足應用要求,但如果想精確的控制應用,或者想覆蓋自動配置,使用配置類是另一種很好的選擇,強調

Linux系列教程——Linux鏈接命令和權限管理命令

密碼 mission pos link 掩碼 Owner 最大的 linux系統 passwd   前一篇博客我們講解了Linux文件和目錄處理命令,還是老生常淡,對於新手而言,我們不需要完全記住命令的詳細語法,記住該命令能完成什麽功能,然後需要的時候去查就好了,用的多了我

Spring Cloud Config教程客戶端使用

home 本地 snap 遠程 html local nap parent path 要在應用程序中使用這些功能,只需將其構建為依賴於spring-cloud-config-client的Spring引導應用程序(例如,查看配置客戶端或示例應用程序的測試用例)。添加依賴關

Java NIO教程 通道之間的資料傳輸

                                 Java NIO教程(五) 通道之間的資料傳輸

Spring.NET教程容器中物件的作用域(基礎篇)

容器中物件的部署分為兩種方式:singleton和非singleton(Java裡叫prototype)。這裡的singleton指的是“單例模式”,就是說當一個物件被定義為singleton時,容器中就只會有一個共享的例項,任何時候通過id或別名請求該物件都會返回這個共享例項的引用(也就是說這個物件只會被建

Docker入門教程Docker安全

【編者的話】DockOne組織翻譯了Flux7的Docker入門教程,本文是系列入門教程的第五篇,介紹了Docker的安全問題,依然是老話重談,入門者可以通過閱讀本文快速瞭解。 我們必須高度重視開源軟體的安全問題,當開發者在使用Docker時,從本地構建應用程式到生產環境部署是沒有任何差異的(譯

ADO.NET入門教程 細說資料庫連線池

題外話 通過前幾章的學習,不知道大家對ADO.NET有一定的瞭解了沒有。撇開文章質量不講,必須肯定的是,我是用心去寫每一篇文章的。無論是是在排版上,還是在內容選取上我都花了不少心思。我希望通過本系列文章,無論是新手還是老手,在ADO.NET上都能有所收穫。如果大家覺得有幫助,我希望能得到您的推薦和關注,讓我

檢視修改的歷史記錄 git log 命令 和 返回上一次修改版本 git reset 、git reflog

上一篇,已經學會了修改檔案,然後再把修改檔案提交到Git版本庫,now,再重複執行一次,修改index.html檔案如下: 然後執行新增、提交: 像這樣,你不斷對檔案進行修改,然後不斷提交修改到版本庫裡,每次修改到一定程度時,再提交;一旦你把檔案改亂了,或者誤刪了檔案,還可以從最

企業級 SpringBoot 教程 springboot整合 beatlsql

BeetSql是一個全功能DAO工具, 同時具有Hibernate 優點 & Mybatis優點功能,適用於承認以SQL為中心,同時又需求工具能自動能生成大量常用的SQL的應用。 beatlsql 優點 開發效率 無需註解,自動使用大量內建SQL,輕易完成增

Java大資料培訓視訊全套教程-Git教程34-馬克-專題視訊課程

Java大資料培訓視訊全套教程-Git教程(34)—6人已學習 課程介紹         Java大資料系列視訊課程:"java大資料培訓學校全套教材"系列課程由750集視訊構成,基本就 是1)時下流行

python3教程:number

之前我們建立了字串,並可以操作字串做出各種東西,比如相加相乘。 在python中數字也可以加減乘除,且運算規則也是我們正常認知中的運算,即十進位制。 #在python中加減乘分別用+-*來代替# >>> 6+5 11 >>> 10-9 1 >&g

企業級 SpringCloud 教程 路由閘道器(zuul)

在微服務架構中,需要幾個基礎的服務治理元件,包括服務註冊與發現、服務消費、負載均衡、斷路器、智慧路由、配置管理等,由這幾個基礎元件相互協作,共同組建了一個簡單的微服務系統。一個簡答的微服務系統如下圖:  注意:A服務和B服務是可以相互呼叫的,作圖的時候忘記了。並且配置服務也是註冊到服務註冊中心的。