小团队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 wst@192.168.88.46:/home/wst/wanghanbo/wireshark.git
$ git push origin master
这样git服务器就有了第一个初始代码版本。
2.开发人员提取代码
下面各位其他的参与开发人员先安装git,再设置用户名与邮箱:
git config --global user.name"My Name"
git config --global user.email"my@email.co
然后从代码库clone出代码:
$ git clone
wst@192.168.88.46:/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 pull origin 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
- *~
- \#*#
#
# 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.在将代码库再前面工程师一样倒过去即可~~~休息,休息一下~~
小团队git开发模式的更多相关文章
- 记一次小团队Git实践(上)
公司规模不大,成立之初,选择了svn作为版本控制系统.这对于用惯了git的我来说,将就了一段时间后,极为不爽,切换到git-svn勉强能用.随后,因为产品需要发布不同的版本,而git-svn对远程分支 ...
- “多团队大规模”开发模式 - 基于SAP HANA平台的多团队产品研发
应用SAP HANA “官方”开发模式的伙伴们在转到“多团队大规模”开发模式时会遇到各式各样的心理不适应的状况,各种纠结.比如GIT Repository和HANA Repository冲突什么的. ...
- 记一次小团队Git实践(下)
在上篇中,我们已经能基本使用git了,接下来继续更深入的挖掘一下git. 更多的配置自定义信息 除了前面讲的用户名和邮箱的配置,还可以自定义其他配置: # 自定义你喜欢的编辑器,可选 git conf ...
- 记一次小团队Git实践(中)
对于初学者,从使用上先入手,往往学的最快,并从中汲取教训,再回头更深入的学习,效果尤佳. 安装git 安装git自不必说,mac已经内置了git,linux下一个命令就能搞定,windows下需要下载 ...
- 小团队Git协作流程
git和svn 最大的差异在于git是分布式的管理方式而svn是集中式的管理方式. 集中式 集中式代码管理的核心是服务器,所有开发者在开始coding之前必须从服务器获取代码,然后开发,最后解决冲突, ...
- 用小程序·云开发两天搭建mini论坛丨实战
笔者最近涉猎了小程序相关的知识,于是利用周末时间开发了一款类似于同事的小程序,深度体验了小程序云开发模式提供的云函数.数据库.存储三大能力.关于云开发,可参考文档:小程序·云开发. 个人感觉云开发带来 ...
- GitHub Flow & Git Flow 基于Git 的两种协作开发模式
介绍基于Git 两种协作开发模式,GitHub Flow & Git Flow 对于Github 一些好用的特殊操作技巧 ,可以见GitHub 特殊操作技巧 和Git的基本操作 一 GitHu ...
- git的团队协作开发
title: git的团队协作开发 date: 2018-04-24 14:00:03 tags: [git] --- 项目负责人创建组织架构 在控制面板中点击组织按钮,添加组织,在这里可以把组织理解 ...
- 图文详解如何利用Git+Github进行团队协作开发
团队协作开发中,大部分都会用到版本控制软件,比如Git.Svn等.本文将通过一个实例,详细讲解在真实的工作环境中,一个团队应该如何利用Git+Github进行协作开发,即详解Git工作流程.并就其中比 ...
随机推荐
- CF 322B Ciel and Flowers 贪心水题
B. Ciel and Flowers time limit per test 1 second memory limit per test 256 megabytes input standard ...
- javadataAbout stack and heap in JAVA(2)
改章节个人在上海喝咖啡的时候突然想到的...近期就有想写几篇关于javadata的笔记,所以回家到之后就奋笔疾书的写出来发表了 The stack is much faster than the he ...
- UE4创建空白关卡并添加碰撞体
让我们接着上次继续学习UE4引擎,今天我们学习下怎样创建空白的关卡以及添加碰撞物体. 一. 创建空白关卡 1) 点击文件 -> 新建关卡(或者按快捷键Ctrl+N). 2) 你可以选择Defau ...
- Robot Framework使用技巧
1.变量的使用 变量可以在命令行中设置,个别变量设置使用--variable (-v)选项,变量文件的选择使用--variablefile (-V)选项.通过命令行设置的变量是全局变量,对其所有执行的 ...
- Apache2.2下载及安装
php5.5 + apache2.4 安装配置图文步骤 http://wenku.baidu.com/link?url=8OHaJATVBHP5QrD-J2pTkmBOjY-ZG5cDngKMz7wl ...
- Debian安装 ss-qt5
Kali Linux 基于 Debian ,安装时得参考 Debian 安装方法,用 Ubuntu 的方法装不上.官方安装指南这样说: Debian安装指南 然而在执行 sudo apt-get in ...
- nginx服务器上遇到了acces denied,报错是fastCGI只要好好修改配置就行了
猜想: 懵逼 实践: 首先通用的方法,并没有解决问题. 1.修改php-fpm配置文件vim /etc/php-fpm.d/www.confuser = nginx 编辑用户为nginx ...
- Codeforces Round #390 (Div. 2)
时隔一个月重返coding…… 期末复习了一个月也不亏 倒是都过了…… 就是计组61有点亏 复变68也太低了 其他都还好…… 假期做的第一场cf 三道题 还可以…… 最后room第三 standing ...
- SAP HANA学习资料大全[非常完善的学习资料汇总]
Check out this SDN blog if you plan to write HANA Certification exam http://scn.sap.com/community/ha ...
- 工具-Quick time播放器
拍屏的视频.素材视频等,用Quick time观看 1.左下角可切换时间/帧编号,直观看到某pose的帧位置: 2.播放进度条上有卡尺,可选择部分视频,显示-仅播放所选部分,点上显示-循环,可以反复观 ...