个人觉得SVN对于使用者而言比较简单直接,操作起来也比较好理解。但是代码保管方面不如git。
首先说一下SVN和GIT的区别:
svn是本地和服务器,然而git分为本地代码,本地服务器和远程服务器。因此在操作方面不如svn那么直接。
在这里把git基本操作整理一下,提供自己和有需要的小伙伴参考~
Git 客户端有好几种,这里讲解EGit和SourceTree的基本用法。(个人比较推荐后者,最近很受人追捧的git客户端)
git基本操作参考图
1.EGit
首先说一下EGit个人感觉是通过SVN的思想给简单化的git客户端,所以这样就不能体现git的强大所在。
个人觉得egit使用git操作有点大材小用的赶脚~而且egit本身也有一些小毛病。
如果你只是做基本的代码更新,提交等功能可以勉强用egit,这里还是强烈推荐使用sourcetree。
搭建eclipse git环境(声明:博主使用的是LUNA因此eclipse自带git插件)
由于安装插件网上有很多带图片的步骤,在这里就不唠叨如何安装插件了~1、复制git项目路径
- Add to Index: 把要更新的文件提交到暂存区中,由git追踪。
- Remove from Index: 把已提交到暂存区的文件删除。
- Commit: 把文件提交到本地服务器。
- Commit and Push: 把文件提交到本地服务器和远端服务器。
- Synchronize Workspace: 本地代码库和远程服务器同步代码。
- Fetch from Upstream: 远端服务器中取到本地服务器。
- Pull: 从远程服务器中更新本地代码库。
2.SourceTree
已经有一段时间流行github版本控制来分布式管理代码库,客户端也比较多,这里将最火的客户端工具简单介绍一下。
sourcetree通过一个简单的用户界面即可使用所有的Git命令,个人认为功能相对比较全,而且通过用户界面来操作相对来讲降低了很多学习成本。
1、在github中复制git项目路径(同Egit)
2、Clone / New 克隆github服务端到本地。(Destination Path为本地git服务器根路径,个人比较推荐使用eclipse的workspace作为根路径,目的是方便eclipse导入工作空间中的项目)
3、双击orgin中的develop来checkout开发分支到本地。
4、在develop分支中创建feature分支
在本地的develop中创建feature开发后提交到远程develop服务器步骤。
1.双击Branches中新建的feature分支来切换分支到feature。2.eclipse中导入工作空间中项目来开发。
3.本地开发完后在File Status中点击最下方的File Status 来将本地开发的代码add到Staged files后点击最上方的提交。
4.提交完后需要切换到develop分支先pull一下更新,之后合并feature中的代码到本地develop,如有冲突可以外联Beyond Compare软件来解决冲突,最后push到远程develop服务器。
Git Flow的流程图
主分支
- 主分支是所有开发活动的核心分支。所有的开发活动产生的输出物最终都会反映到主分支的代码中。主分支分为master分支和development分支。
1. master分支
- master分支上存放的应该是随时可供在生产环境中部署的代码(Production Ready state)。这个分支只能从其他分支合并,不能在这个分支直接修改。
- 所有在Master分支上的Commit应该Tag。
2.Develop 分支
- 这个分支是我们是我们的主开发分支,包含所有要发布到下一个Release的代码,这个主要合并与其他分支,比如Feature分支。
3.Feature 分支
- 这个分支主要是用来开发一个新的功能,一旦开发完成,我们合并回Develop分支进入下一个Release。
- Feature分支做完后,必须合并回Develop分支, 合并完分支后一般会删点这个Feature分支,但是我们也可以保留。
4.Release 分支
- 当你需要一个发布一个新Release的时候,我们基于Develop分支创建一个Release分支,完成Release后,我们合并到Master和Develop分支。
- Release分支基于Develop分支创建,打完Release分之后,我们可以在这个Release分支上测试,修改Bug等。同时,其它开发人员可以基于开发新的Feature (记住:一旦打了Release分支之后不要从Develop分支上合并新的改动到Release分支)
- 发布Release分支时,合并Release到Master和Develop, 同时在Master分支上打个Tag记住Release版本号,然后可以删除Release分支了。
5.Hotfix 分支
- 当我们在Production发现新的Bug时候,我们需要创建一个Hotfix, 完成Hotfix后,我们合并回Master和Develop分支,所以Hotfix的改动会进入下一个Release。
- hotfix分支基于Master分支创建,开发完后需要合并回Master和Develop分支,同时在Master上打一个tag。
3.总结
简单整理一下基本使用git flow的流程如下:
- 克隆到本地服务器后再checkout远程develop分支。在切换到本地develop分支中创建feature分支做功能开发。
- 开发完成后将feature中代码提交并推送到远程develop分支上。
- 在develop分支中创建release分支。并在该分支进行测试,测试完成后将修改的内容合并到master和develop分支上。(做完合并后可以删除该分支,也可以保留)
- master上突然发现紧急bug需要创建补丁修改时候在master分支上创建hotfix分支修补bug,修补完成后需要将修补内容合并回master和develop分支中(建议使用pull request 进行master的合并)。
SourceTree&Git部分名词解释
- 克隆(clone):从远程仓库URL加载创建一个与远程仓库一样的本地仓库
- 提交(commit):将暂存文件上传到本地仓库(我们在Finder中对本地仓库做修改后一般都得先提交一次,再推送)
- 检出(checkout):切换不同分支
- 添加(add):添加文件到缓存区
- 移除(remove):移除文件至缓存区
- 暂存(git stash):保存工作现场
- 重置(reset):回到最近添加(add)/提交(commit)状态
- 合并(merge):将多个同名文件合并为一个文件,该文件包含多个同名文件的所有内容,相同内容抵消
- 抓取(fetch):从远程仓库获取信息并同步至本地仓库
- 拉取(pull):从远程仓库获取信息并同步至本地仓库,并且自动执行合并(merge)操作,即 pull=fetch+merge
- 推送(push):将本地仓库同步至远程仓库,一般推送(push)前先拉取(pull)一次,确保一致
- 分支(branch):创建/修改/删除分枝
- 标签(tag):给项目增添标签
- 工作流(Git Flow):团队工作时,每个人创建属于自己的分枝(branch),确定无误后提交到master分枝
- 终端(terminal):可以输入git命令行