1. 程式人生 > >小團隊git開發模式

小團隊git開發模式

       實驗室要使用git進行程式碼管理,但是git非常複雜,各種開發模式也是層出不窮。作為新手的偶們很是發囧啊!!網上搜了一下,發現很多並不適合我們小團隊運作(它本身就是為linux核心管理而開發的分散式程式碼管理工具)。關於分散式和集中式(svn)程式碼管理的區別大家可以自己去搜搜,這裡就不多說了。

        網上找到的git的中文資料,大部分是講git的命令的使用,對於git的工作流程和如何實現團隊合作的介紹少之又少,特別是對於團隊程式碼庫管理者的文件,幾乎沒有。即便有也是上來就講各種分支xxxx的,有點暈。這裡將介紹一種最簡單,最原始的如何使用git進行團隊合作開發。

模式簡介

      下圖就是簡單小組的合作模式圖:


 這種模式的開發流程如下:

1、由其中一個開發者這伺服器上建立一個數據庫。 所有開發者都可以向資料庫提交和下載東西,這裡必須規定一定的時間間隔(一週或者一天)必須提交一次,不然以後解決衝突時是個大問題。 如果每個人的開發耦合度很高,我們可在伺服器上建立分支,然後每人每次提交到自己的分支上,過一段時間之後(不能太久)有一個人去合併分支。然後所有 人更新自己的資料庫的master分支,使之跟伺服器上的master分支同步。
2、這樣伺服器會有非常多的版本資訊,集合了每個人的版本資訊。過了一段時間之後,例如有里程碑的出現。再由一個人把所有改動打補丁到最終伺服器上。這樣最終伺服器的版本資訊就會很精練。
3、當我們的伺服器無限膨脹到一定程度的時候我們可以把它刪除,然後用最終伺服器上的一個版本作為起始版本。

下面我們開始實踐了

 1. git伺服器的搭建

       如果使用git的人數較少,可以使用下面的步驟快速部署一個git伺服器環境:

       http://www.haijd.net/article/index.php?action=read&id=840

最簡單不加任何安全控制時,就是在伺服器上安裝一個.git,如下:

$ cd /opt/git
$ mkdir project.git
$ cd project.git
$ git –bare init

       其中,搭建伺服器後,開發人員就可以把它加為遠端倉庫,推送一個分支,從而把第一個版本的工程上傳到倉庫裡了。值得注意的是,每次新增一個新專案都需要通過 shell 登入主機並建立一個純倉庫。我們不妨以 wst 作為 git 伺服器使用者和倉庫所在的主機名。那麼以下這些命令都是可用的:

# 在一個開發人員的電腦上

 $ cd myproject

 $ git init

 $ git add .                #這裡選擇你需要新增的檔案

 $ git commit -m ‘initial commit’

 $ git remote add origin [email protected]:/home/wst/wanghanbo/wireshark.git 

 $ git push origin master

這樣git伺服器就有了第一個初始程式碼版本。

2.開發人員提取程式碼

        下面各位其他的參與開發人員先安裝git,再設定使用者名稱與郵箱:

  git config --global user.name"My Name"

  git config --global user.email"[email protected]

         然後從程式碼庫clone出程式碼:

$ git clone

[email protected]:/home/wst/wanghanbo/wireshark.git

這樣,每位參與的組員也有了與程式碼庫版本一致的第一份程式碼。

3.開發中的操作

        現在,我們要開始進行開發了。可以參考

        http://blog.enjoyrails.com/2008/12/31/git%E4%B8%80%E5%88%86%E9%92%9F%E6%95%99%E7%A8%8B/

  首先我們來看如何更新原生代碼到最新版本:

 第一種方法用fetch(需要merge才能合到原生代碼中)

git fetch origin master :temp
git merge temp                                #合併更新到temp分支的程式碼到原生代碼庫的master分支中

更新程式碼方式的另一種方法(git pull是git fetch和git merge命令的一個組合)

git pullorigin master  

  解決程式碼的衝突問題

注:當merge命令自身無法解決衝突的時候,它會將工作樹置於一種特殊的狀態,並且給使用者提供衝突資訊,以期使用者可以自己解決這些問題。當然在這個時候,未發生衝突的程式碼已經被git merge登記在了index file裡了。如果你這個時候使用git diff,顯示出來的只是發生衝突的程式碼資訊。

在你解決了衝突之前,發生衝突的檔案會一直在index file中被標記出來。這個時候,如果你使用git commit提交的話,git會提示:filename.txt needs merge。在發生衝突的時候,如果你使用git status命令,那麼會顯示出發生衝突的具體資訊。

解決玩衝突問題後,需要commit一下:

git commit                                         #將已經解決衝突的程式碼提交到原生代碼庫
git branch -d temp                              #刪除temp分支

  新建分支並進行本地開發:

git branch development                      #搞個development分支給自己開發

git checkout development                  #切換至development分支進行開發

開發xxxx過程,確認功能開發完畢,可以繼承到完整系統中時執行:

git checkout master                          #切換至master分支

git merge development                      #合併development及master分支

  修改程式碼後,檢視已修改的內容:

檢視修改的內容

git diff --cached

將新增加檔案加入到git中

git add file1 file2 file3

可以設定忽略的條件:

最簡單的方法在專案根目錄與.git目錄同一位置建立一個檔案: .gitignore

#
# NOTE! Don't add files that are generated in specific
# subdirectories here. Add them in the ".gitignore" file
# in that subdirectory instead.
#
# NOTE! Please use 'git ls-files -i --exclude-standard'
# command after changing this file, to see if there are
# any tracked files which get ignored after the change.
#
# Normal rules
#
.*
*.o
*.o.*
*.a
*.s
*.ko
*.so
*.so.dbg
*.mod.c
*.i
*.lst
*.symtypes
*.order
modules.builtin
*.elf
*.bin
*.gz
*.bz2
*.lzma
*.lzo
*.patch
*.gcno
 
#
# Top-level generic files
#
/tags
/TAGS
/linux
/vmlinux
/vmlinuz
/System.map
/Module.markers
/Module.symvers
 
#
# git files that we don't want to ignore even it they are dot-files
#
!.gitignore
!.mailmap
 
#
# Generated include files
#
include/config
include/linux/version.h
include/generated
 
# stgit generated dirs
patches-*
 
# quilt's files
patches
series
 
# cscope files
cscope.*
ncscope.*
 
# gnu global files
GPATH
GRTAGS
GSYMS
GTAGS
 
*.orig
*~
\#*#
可以參見:

http://www.code007.org/?p=291

http://www.cnblogs.com/wucg/archive/2011/08/16/2141647.html

從git中刪除檔案:

git rm file1
git rm -r dir1
提交修改到原生代碼庫
git commit -m 'this is memo'

如果想省掉提交之前的 git add 命令,可以直接用

git commit -a -m 'this is memo'

commit和commit -a的區別, commit -a相當於:1.自動地add所有改動的程式碼,使得所有的開發程式碼都列於index file中;2.自動地刪除那些在index file中但不在工作樹中的檔案;3.執行commit命令來提交給本地的程式碼庫。

  提交所有修改到遠端伺服器

先檢出伺服器的程式碼,與當前程式碼比對,修改衝突。

git fetch  origin master :temp                           #跟git程式碼庫fetch到一個temp分支
git merge temp                                                 #保證程式碼是最新的。

解決玩衝突問題後,需要commit一下:

git commit                                         #將已經解決衝突的程式碼提交到原生代碼庫
git branch -d temp                              #刪除temp分支

解決衝突後

提交給遠端的git伺服器後,其它團隊成員才能更新到這些修改(因為我們還是採用的集中式的管理,每個開發人員都是從git伺服器中檢出更新)

git push origin master

  想要恢復到某個版本的程式碼或者撤銷某個操作

回滾程式碼:

git revert HEAD

你也可以revert更早的commit

例如:git revert HEAD^

想要恢復到某個版本的程式碼就用這個git reset命令:

git reset

恢復到之前的版本
----mixed 是 git-reset 的預設選項,它的作用是重置索引內容,將其定位到指定的專案版本,而不改變你的工作樹中的所有內容,只是提示你有哪些檔案還未更新。
--soft 選項既不觸動索引的位置,也不改變工作樹中的任何內容。該選項會保留你在工作樹中的所有更新並使之處於待提交狀態。相當於再--mixed基礎上加上git add .
--hard 把整個目錄還原到一個版本,包括所有檔案。

詳細內容參看:http://blog.sina.com.cn/s/blog_68af3f090100rp5r.html 

目前先進行到這裡,最終的程式碼伺服器,俺們暫時放一邊。當然如果您想要實現它,可以另外建一個xx.git.在將程式碼庫再前面工程師一樣倒過去即可~~~休息,休息一下~~


相關推薦

Meth | 團隊git開發模式

知識庫 bubuko 一段時間 分享圖片 ace 當我 團隊 無限 com 這種模式的開發流程如下: 1、由其中一個開發者這服務器上建立一個數據庫。 所有開發者都可以向數據庫提交和下載東西,這裏必須規定一定的時間間隔(一周或者一天)必須提交一次,不然以後解決沖突時是個大問

團隊git開發模式

       實驗室要使用git進行程式碼管理,但是git非常複雜,各種開發模式也是層出不窮。作為新手的偶們很是發囧啊!!網上搜了一下,發現很多並不適合我們小團隊運作(它本身就是為linux核心管理而開發的分散式程式碼管理工具)。關於分散式和集中式(svn)程式碼管理的區

團隊Git協作流程

git和svn 最大的差異在於git是分散式的管理方式而svn是集中式的管理方式。 集中式 集中式程式碼管理的核心是伺服器,所有開發者在開始coding之前必須從伺服器獲取程式碼,然後開發,最後解決衝突,提交。所有的版本資訊都放在伺服器上。 基於集中式的程式碼管理,

業務團隊開發模式

現狀及問題 需求傳遞效率低,需求評審效率低,缺乏業務全景圖和全鏈路需求圖,小需求也需要眾人評審 重複建設較多,團隊協同效率低,根

Git 團隊開發指南

多人開發步驟 組長-準備步驟 初始化git專案。如:使用github的情況——先在github建立專案 git clone [email protected]:xxxxx/xxxxxxx.git git checkout -b develop git p

程序商城系統開發模式平臺搭建詳解

小程序 效果 商機 應用場景 模式 找到 成本 時代 哪些 小程序商城系統開發(李想.185.6504.8478)隨著移動互聯網的深入普及,流量碎片化的趨勢無法逆轉,百度、淘寶等平臺成本越來越高,效果卻越來越差,企業單一流量入口保持增長的時代結束。小程序二維碼多入口的訪問形

程序共享鏈系統開發模式

image 整合 排序 廣告 商品 什麽 營銷 http 資源 小程序共享鏈系統模式 小程序共享鏈模式系統 150-1305-3356(小麗)小程序共享鏈平臺系統 小程序共享鏈軟件 小程序共享鏈定制共享鏈是一款營銷工具,解決實體店現有的營銷方案難以刺激消費者、被電商的打壓

為什麽我從 Git Flow 開發模式切換到了 Trunk Based 開發模式

敏捷開發 軟件開發 開發規範 我已經使用 Git Flow 構建我的 Git 分支有幾年了。但是,我遇到了 Git Flow 的一些問題,其中大部分來自長期存在的分支。解決這些問題的方案就是 Trunk Based Development。這是一個非常簡單的技術,也是有效的持續交付的基礎。在這篇文

開發初探 —— 更簡便的程序開發模式

全棧工程師 openid team 考慮問題 課程 不用 研發 社區 由於 歡迎大家前往騰訊雲+社區,獲取更多騰訊海量技術實踐幹貨哦~ 本文由李成熙heyli發表於雲+社區專欄 李成熙,騰訊雲高級工程師。2014年度畢業加入騰訊AlloyTeam,先後負責過QQ群、花樣直

前端團隊建設(實用前端開發規範,推薦收藏)

一、命名規則(英文-直譯) 1、檔案命名 資料夾/檔案的命名統一用小寫 保證專案有良好的可移植性,可跨平臺  2、檔案引用路徑 因為檔案命名統一小寫,引用也需要注意大小寫問題 3、js變數 3.1 變數 命名方式:小駝峰 命名規範:字首名詞 命名建議:語

開發初探 —— 更簡便的程式開發模式

原文連結 李成熙,騰訊雲高階工程師。2014年度畢業加入騰訊AlloyTeam,先後負責過QQ群、花樣直播、騰訊文件等專案。2018年加入騰訊云云開發團隊。專注於效能優化、工程化和小程式服務。 小程式誕生以來,業界關注小程式前端的技術演進較多,因此眾多小程式前端

團隊敏捷開發的組織架構和協作模式

寫這篇文章的背景是:一個專案組實施Scrum取得成效,如何在整個開發部門推廣Scrum?看一下我們一個大產品,三個專案組共同完成的具體實踐: 我們做了如下的組織調整: 1.產品部增加一名總監(CPO),負責公司層面的產品思路,整合三個子產品 2.各個Scrum小組的架構師和DBA成立虛擬架構師團隊,架構師團

團隊合作開發git衝突解決方案 Intellij IDEA

一般在團隊合作開發一個專案的過程中,經常出現兩個人同時修改一個檔案然後都向主master提交commit,這樣就會產生衝突(conflict),那麼這種情況如何解決? 1 新建分支 如果專案的主分支是master,自己從主分支fork下來的就是屬於自己的

設計的一個適合團隊專案的git工作流

工作流模型      根據目前開發團隊規模和開發環境,設計了一個git工作流。     (一)圖示            (二)基本工作流程 先在CodeClub上新建版本庫,預設生成master分支,master是穩定分支,記錄了每個釋出版本的節點。從mast

使用Git實現團隊協作開發提高效率

Git是一個開源的分散式版本控制系統,用以有效、高速的處理從很小到非常大的專案版本管理。Git 是 Linus Torvalds  為了幫助管理 Linux 核心開發而開發的一個開放原始碼的版本控制軟體。 git與github有什麼區別? git(工具)是一個版本控制工具

基於yui的前端"團隊開發"模式

一篇關於web前端團隊開發的文章。關鍵詞:模組化開發module,YUI Combo減少http請求 ================================ 如今web專案也越來越大,單人開發一個網站已經不是什麼新鮮事了,這種web專案規模擴大的速度似乎超過我們的

圖文詳解如何利用GIT+GitHub進行團隊寫作開發

bsp 解決沖突 atlas evel src 出現 info flow 多人 圖文詳解如何利用Git與GitHub進行團隊協作開發 團隊協作開發中,大部分都會用到版本控制軟件,比如Git、Svn等。本文將通過一個實例,詳細講解在真實的工作環境中,一個團隊應該如何利用Gi

Git分支開發模式

這篇部落格將主要介紹團隊中如何使用Git分支模式進行開發。 問題背景 先介紹一下分支:分支分為遠端分支和本地分支。 建立版本庫時,預設會有一個master遠端分支,我們克隆到本地,於是建立了本地master分支。預設情況下,一個遠端分支,一個本地分

git命令——穩定主幹開發模式相關命令

【目的】當在分支A上開發時,別的支線或主線有不得不修改的緊急任務,但又不想把當前開發到一半的程式碼commit,則此時可以使用stash將開發一半的程式碼推入到Git棧中。等緊急任務處理完畢,再從Git棧中將程式碼拉回來

iOS開發模式

從事iOS開發接近兩年,總結了下關於開發模式的經驗。 我認為開發模式的本質是處理view和從伺服器請求過來的資料的關係。 個人開發模式經驗基本分為四個階段: 1,          將view和da