最近在项目中使用Git进行代码管理,之前一直用SVN进行管理,现在谈一谈Git在项目中如何与EGit插件配合使用,高效同步开发。

使用过SVN一段时间的人,初识Git一定感觉很别扭,发现会遇到各种各样的问题,感觉没有SVN方便,究其原因是还没有领略到Git之美,没有熟练使用Git。

因为我在刚开始的时候就有这样的感觉,当深入研究Git一段时间之后才深深的被Git的魅力吸引,慨叹Linux大师深刻而又灵动的思想,顶礼膜拜。

闲话不多说,现在开始谈一谈Git菜鸟如何快速使用Git+EGit进行项目开发:

这里补充一下:工具是死的,管理是灵活的。无论是SVN还是CVS或者是Git,如果各位在网上看见说是必须这么这么管理,一定是错误的。因为管理工具必须依附于工作场景才能够正确使用,下面我会结合我在项目管理时的经验,谈谈Git应该怎么使用。

EGit是Eclipse的Git插件,下载安装方式这里不介绍了,从网上自学一下吧。

Git命令行方式网上也有很多介绍,安装方式这里也不做介绍,网上自学一下 吧,我这里采用的是GitBash。

简单说来Git+Egit进行代码管理,主要解决以下几个方面:

1. 理解分支----团队开发如何管理分支

2.注意开发过程---理解本地提交commit、远程推送push、远程获取更新pull、查看本地版本库状态status等命令

3.一些经验

那么首先我先从分支说起:

1.Git分支的操作建议在EGit中操作,很方便简单,如下图所示:

在将一个新工程clone到本地的时候,应该在local(本地分支)和remote(远程分支)中只有一个master分支,也就是默认的主干分支。

那么Git相比于SVN的第一个优势在此体现出来,Git可以灵活快捷的创建和切换分支,SVN创建分支和签出分支很麻烦需要将整个工程签出,而Git只保存不同的地方所以签出很快。

Git分支主要有如下几个作用:

一、普通分支(团队如何通过分支合理有效的管理代码)

(1)保证一个主干分支master,一般这个分支是严格控制的,是确保上线的发布版本。

(2)创建一个develop分支,这个分支是大家平时开发的分支,每个开发人员都需要把develop签到自己的本地。然后由一个人定期的将可用稳定的develop分支合并到master分支中。

(3)每个开发人员在本地,以develop分支为基础,创建自己的develop_XXX_2014XXXX分支,这里的分支可以不断的合并到自己的develop分支上。也可以经常删除。

注意:一般在本地可以有多个分支,而在远程主要有master和develop两个分支。这里不是绝对的,这里是需要与管理方式相结合的,请注意使用场景,一会在Bug分支上我做详细说明。

常见的操作及问题:

1.分支的创建及切换

newBranch可以创建一个分支。那么想切换哪一个分支,在分支上双击即可。

注意:如果分支中有些改动一旦push到远程,而远程没有这个分支的时候,在远程会自动创建分支。

在切换分支的时候,如果该分支有没有提交的代码,是不允许切换的,这时候可以进行两个操作:

(1)commit提交

(2)stash保存工作区,也就是保存工作场景,你会发现在图形化界面中多了一个stashed commits,在切回该分支的时候可以右键这个,将其恢复。

二、Bug分支

其实这个分支是很有讲究的,因为这种分支的场景主要是当前看团队如何组织修改bug:

场景1:上线前测试:此时应该部署的是develop分支,因为总是在改动,这个时候应该采用"个人本地"模式进行开发。如果发现bug,那么个人应该在本地基于develop创建小分支,修改完bug后,合并到develop中,测试没问题将小分支删除。

场景2:上线后发现bug打补丁:此时应该基于master分支创建新分支master_note1,即修补点1,并且提交到远程。每个开发者将远程的master_note1 check下来,并在本地建立分支master_note1。然后每个人可以在本地基于此创建自己的分支,进行合并和提交操作。最后测试没问题后,由一个负责将master_note1合并到master中,并将本地和远程的master_note1删除。

这里介绍几个常见的删除分支的命令,这里建议用GitBash命令行的方式,因为用EGit删发现删不干净。

1.git branch -a     //查看本地和远程分支
2.git push origin --delete <branchName>  //删除远程分支
3.git push origin --delete tag <tagname>  //删除tag标记

4.git branch  -D  <branchName>  //删除本地分支

这样之后发现分支被删除了。

2. 现在我再来讲讲开发过程如何理解本地提交commit、远程推送push、远程获取更新pull、查看本地版本库状态status等命令

这里我不会很详细的讲这块,只列出一些基本的命令,如果有问题的可以去网上查询,commit、push、pull命令我就不写了很简单。

(1)git status;
如果显示changes not staged for commit 表示修改完文件后,没有add
如果add之后,会显示Changes to be committed:将要被提交

(2)通过git status之后,可以查看列表文件中,某一个文件改变的具体详情
git diff readme.txt

注意:用“git diff HEAD -- readme.txt”命令可以查看工作区和版本库里面最新版本的区别:

git diff:是查看working tree与index file的差别的。
git diff --cached:是查看index file与commit的差别的。
git diff HEAD:是查看working tree和commit的差别的。(你一定没有忘记,HEAD代表的是最近的一次commit的信息)

(3)每次改一个文件,可以git add readme.txt

(4)git log 查看最近三次提交记录/ git log --pretty=online

(5)git reset --hard HEAD^(代表回到最近一次版本的上一个版本)

或者是 git reset --hard 3828164(可以不写全)

(6)git reflog 可以查看最全的记录,包括通过reset之后删除的记录

(7)git pull
如果pull下来的文件,你在本地工作空间有修改,但是没commit,会pull不下来,报错。
如果本地修改后commit了,pull正常有可能有冲突。
如果pull下来的文件,不是你在本地空间修改的文件,那不用commit也可以正常pull

(8)$ git checkout -- readme.txt(从版本库恢复,如果有缓冲区,从缓冲区中恢复,如果没有就从版本库中恢复)
在工作空间修改文件,未add,未commit,想撤回刚才操作。
如果add这个文件了,就不行了。
如果add之后又修改了,用checkout 可以回退到刚add的时候。
如果这个时候想撤销回add,可以使用下面命令:

git reset HEAD readme.txt

补充几个分支操作命令:

1.git branch -a
//删除远程分支
2.git push origin --delete <branchName>
3.git push origin --delete tag <tagname>
//删除本地分支
4.git branch -d xxxxx   

最后我来说说Git的开发经验:

1.了解Git区域划分,如下图:

2.尽量多次commit。在push之前先pull,修改完冲突之后立刻commit。

3.如果有不希望改动之后在commit中体现的文件,请及时写在ignore中。

4.如果有异常情况,比如在target文件夹下class等文件莫名其妙的出现在改动列表中,请clear一下工程,重新编译刷新一下即可解决。

以上是个人观点,请读者批评指正,谢谢。(待续)

Git Bash+EGit在项目中配合使用最常用方法总结(根据场景使用)的更多相关文章

  1. git分支概念与项目中的应用

    文档:https://git-scm.com/book/zh/v2/Git-%E5%88%86%E6%94%AF-%E5%88%86%E6%94%AF%E7%AE%80%E4%BB%8B 分支理解 m ...

  2. github 用git bash上传项目 最后提示 Everything up-to-date 但没传上去

    今天为了把本地的项目远程到githup远程仓库,把好久不用的githup命令重新用了起来,不用怀疑,很正常的出错了. 为了长点记性,总结错误与解决办法如下: 1.我犯得第一个简单错误,是忘了git c ...

  3. Git 如何只更新项目中某个目录里的文件

    Git由于在远端和本地都有一个代码库, 这样更新单个文件比SVN要麻烦一点.   1. 如果想拿远端git服务器上的最新版本(或某个特定版本)覆盖本地的修改,可以使用git pull命令,   但这会 ...

  4. Windows下使用Git Bash上传项目到GitHub

    http://blog.csdn.net/qq_28304687/article/details/69959238?locationNum=8&fps=1

  5. 项目中关于RPC 和rocketMQ使用场景的感受

    在花生待的这半年,切身体会了系统之间交互场景的接口技术实现方式,个人总结.仅供参考: 1.关于rpc接口,一般情况下 都是同步的.A系统的流程调用B系统.等着B返回,根据返回结果继续进行A接下来的流程 ...

  6. 【开发工具】-- IDEA集成Git在实际项目中的运用

    1.企业实际项目中Git的使用 在实际的企业项目开发中,我们一般Java的项目在公司都有自己的局域网代码仓库,仓库上存放着很多的项目.以我工作过的公司如华为的项目,一般是存放在企业内部的CodeHub ...

  7. 第一次使用Git Bash Here 将本地代码上传到码云

    当我们安装成功git工具时候,初次使用Git时,需要Git进行配置. 1.点击桌面上的这个图标,打开Git Bash:如图所示 2.配置自己的用户名和邮箱 git config --global us ...

  8. Java算法之递归打破及在真实项目中的使用实例

    开心一笑 刚才领导问开发:"你觉得这个项目的最大风险是什么",开发说:"加班猝死" , 气氛尴尬了一分钟!!! 提出问题 1.递归算法简单复习 2.如何实现递归 ...

  9. 项目中使用Prism框架

    Prism框架在项目中使用   回顾 上一篇,我们介绍了关于控件模板的用法,本节我们将继续说明WPF更加实用的内容,在大型的项目中如何使用Prism框架,并给予Prism框架来构建基础的应用框架,并且 ...

随机推荐

  1. springboot集成redis(mybatis、分布式session)

    安装Redis请参考:<CentOS快速安装Redis> 一.springboot集成redis并实现DB与缓存同步 1.添加redis及数据库相关依赖(pom.xml) <depe ...

  2. Unity脚本自动添加注释脚本及排版格式

    Unity脚本自动添加注释脚本及头部注释排版格式 公司开发项目,需要声明版权所有,,,,标注公司名,作者,时间,项目名称及描述等等. 自己总结实现的现成脚本及头部注释排版文本,添加到模版即可. 文件不 ...

  3. 你知道src、url、href的全称吗?

    url:Uniform Resource Locator统一资源定位符 src:Source资源 href:Hypertext Reference超文本引用

  4. bootstrap插件fileinput.js 出现出现$("#xxxx").fileinput({}); 不生效的情况解决

    如果出现$("#xxxx").fileinput({}); 不生效的情况请将fileinput.js中最后几行注释掉: /* $(document).ready(function ...

  5. Java instanceof 关键字是如何实现的?

    作者:RednaxelaFX链接:https://www.zhihu.com/question/21574535/answer/18998914来源:知乎著作权归作者所有.商业转载请联系作者获得授权, ...

  6. js密码64加密

    可以在客户端对密码进行简单的64位加密,服务端对应使用64位解密即可. /** * * Base64 encode / decode * * @author * @date * @email */ f ...

  7. Kinect2.0 MultiSourceFrameReader 的 AcquireLatestFrame 方法获取不到帧的解决方案

    先把大致要写的东西写一下,手里的活忙完了再完善. 在代码中使用下边的语句,获取Kinect中,colorFrame, depthFrame, bodyIndex三种帧,但是经常会遇到在后边的程序中处理 ...

  8. Python笔记十一(迭代器)

    这里我们要学会Iterable和Iterator. 一类是集合数据类型,如list.tuple.dict.set.str等: 一类是generator,包括生成器和带yield的generator f ...

  9. 当我们在谈论JMM(Java memory model)的时候,我们在谈论些什么

    前面几篇中,我们谈论了synchronized.final以及voilate的用法和底层实现,都绕不开一个话题-Java内存模型(java memory model,简称JMM).Java内存模型是保 ...

  10. python获取指定时间差的时间

    在分析数据的时间经常需要截取一定范围时间的数据,比如三天之内,两小时前等等时间要求的数据,因此将该部分经常需要用到的功能模块化,方便以后以后用到的时候复用.在此,也分享给大家. <span st ...