运维文档
Centos7运维命令
Centos7在线搭建docker的elasticsearch环境(单节点)
Centos7使用阿里云yum源
Centos7 Yum相关软件在线安装
Windows运维
工具类运维
禅道系统运维
git使用培训
Docker搭建Hadoop环境
Docker搭建Hadoop环境(新)
Mysql运维
MySQL 索引
Mysql模拟故障恢复案例过程
常用Sql
Docker维护命令
Git常用操作命令
搭建ZSK服务
SVN常用操作命令及维护
Ubuntu相关运维
gitlab安装升级操作
openEuler运维命令
常用统计SQL-治未病
服务人数-活动档案统计
Oracle数据库管理
Windows安装VC2015\VC2017
Idea离线开发的Maven设置
慢病治未病部署步骤
Centos7升级openssh+openssl
OpenEuler22.03源码编译安装Nginx
Centos7 ISO文件做本地yum源
本文档使用 MrDoc 发布
-
+
首页
git使用培训
# Git使用培训 ## 序言 随着项目组产品的多方销售和部署,将产生多分支源码管理,考虑到SVN在分支管理上的乏力,因此经过对比考虑打算将源码迁移到git库中管理,以应对多线源码管理(每个独立医院部署的医院都需要一个源码分支来跟踪可能的定制需求)。 ### 相关网络资料 关于git的安装操作、git客户端安装和操作网络上有非常多的资源,以下是在编写本使用培训时参考的资源,感谢作者的无私奉献。 1. [Git教程](https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000):非常详细的git介绍和带命令的操作说明 2. [Win7安装git客户端教程](http://218.17.22.50:8106/zentao/doc-view-162.html):本人总结的win7安装git客户端的内容 3. [Windows下git客户端的安装和配置](https://blog.csdn.net/bird3014/article/details/72355648):windows下安装git客户端 4. [搭建GitLab+Jenkins持续集成环境图文教程](https://blog.csdn.net/ruangong1203/article/details/73065410):gitlab环境搭建和jenkins集成配置,团队持续集成管理员需要关注 ## git与SVN 目标:讲述git和SVN的异同。 GIT不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等。如果你是一个具有使用SVN背景的人,你需要做一定的思想转换,来适应GIT提供的一些概念和特征。所以,这篇文章的主要目的就是通过介绍GIT能做什么、它和SVN在深层次上究竟有什么不同来帮助你认识它。<br /> 本文就git与SVN的5大区别进行描述: 1. <b>GIT是分布式的,SVN不是</b><br /> SVN是”集中式”的版本控制,git是”分布式”版本控制。所谓分布式和集中式的区别主要就是版本的信息保存的位置不同。集中式的版本控制是把所有的版本信息数据都保存到服务器上,也就是说,当服务器完蛋了,我们就无法获取版本信息,那么就无法进行版本回退等版本的操作。而分布式的版本控制是把版本信息数据保存在本地或远程服务器上,所以就算服务器崩完蛋了,都可以进行版本控制的操作。 2. <b>GIT把内容按元数据方式存储,而SVN是按文件</b><br /> 所有的资源控制系统都是把文件的元信息隐藏在一个类似.svn,.cvs等的文件夹里。如果你把.git目录的体积大小跟.svn比较,你会发现它们差距很大。因为,.git目录是处于你的机器上的一个克隆版的版本库,它拥有中心版本库上所有的东西,例如标签,分支,版本记录等。 3. <font color="red"><b>GIT分支和SVN的分支不同</b></font><br /> 分支在SVN中一点不特别,就是版本库中的另外的一个目录。如果你想知道是否合并了一个分支,你需要手工运行像这样的命令“svn propget svn\:mergeinfo”,来确认代码是否被合并。感谢Ben同学指出这个特征。所以,经常会发生有些分支被遗漏的情况。<br /> 然而,处理GIT的分支却是相当的简单和有趣。你可以从同一个工作目录下快速的在几个分支间切换。你很容易发现未被合并的分支,你能简单而快捷的合并这些文件。 4. <font color="red"><b>GIT没有一个全局的版本号,而SVN有</b></font><br /> 目前为止这是跟SVN相比GIT缺少的最大的一个特征。你也知道,SVN的版本号实际是任何一个相应时间的源代码快照。我认为它是从CVS进化到SVN的最大的一个突破。因为GIT和SVN从概念上就不同,我不知道GIT里是什么特征与之对应。如果你有任何的线索,请在评论里奉献出来与大家共享。<br /> <i>更新:有些读者指出,我们可以使用GIT的SHA-1来唯一的标识一个代码快照。这个并不能完全的代替SVN里容易阅读的数字版本号。但,用途应该是相同的。</i> 5. <b>GIT的内容完整性要优于SVN</b><br /> GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。 6. <font color="red"><b>工作流程有所不同。</b></font><br /> 【SVN的流程】:每次先从服务器上更新代码,修改完成后,上传到服务器。<br /> 【git的流程】:每次提交到服务器之前,也需要从服务器上更新代码,每次修改或者新增代码后,提交到本地,当有需要时,提交到服务器。<br /> 意思就是git本地多了一个可以跟服务器一样的信息保存库。 7. <font color="red"><b>任意两个开发者之间可以很容易的解决冲突。</b></font> Git和SVN没有绝对意义上的好和坏,也是目前使用最多的2种版本控制工具。<b>今后我们团队的版本控制也将同时使用2种版本控制工具。<font color="red">SVN管理日常团队管理平台,比如需求说明文档、设计文档、会议纪要等。GIT用于代码管理,来维护项目产品分支、各医院代码分支等</font></b>(后期会考虑将bug和需求合并到git上进行管理,gitlab自带Issue问题管理,可以与代码进行结合处理)。 ## 安装客户端 目标:完成git客户端的安装。 客户端安装请参考[:Win7安装git客户端教程](doc-view-162.html),目前只有Win7安装指导,其他环境可以参考。 ## 使用场景 git上主要是按分支进行功能开发和分类,所以我们需要了解git上的分支是如何进行管理、以及如何进行分支操作的。下面我们讲按照git在开发过程中的使用场景来讲述一下git的日程操作。 ### 分支管理 目标:对项目组产品各分支进行定义规范。 git以分支来管理不同的版本和功能开发,这个和git的分布式结构是分不开的。<br /> 首先git仓库默认会有一个master分支。这个是git项目的核心分支,始终确保产品的最新可用状态。<br /> 其次根据自身开发和管理需要,一般会分为产品分支,和特性(功能)分支等概念。<br /> 各分支的关系如下(简单模型): ```mermaid sequenceDiagram Master-->>Development:拉出分支V1.0 Development-->>Feature:拉出分支V1.0 Note right of Feature: 开发测试,提交 Feature->>Development:合并提交 Note left of Development: 发布测试 Development->>Master:合并提交V1.1 Development-->>Feature:拉出分支 Note right of Feature: 开发测试,提交 Feature->>Development:合并提交 Development-->>Issue:拉出分支 Note right of Issue: 开发,提交 Issue-->>Development:合并提交 Note left of Development: 发布测试 Development->>Master:合并提交V1.2 Master-->>GZY:拉出分支V1.2 Feature->>Development:合并提交 Note left of Development: 发布测试 Development->>Master:合并提交V1.3 Development->>GZY:合并提交V1.3 ``` ### 下载代码 目标:如何将远程代码克隆到本地,搭建好本地变编译环境。 * 在本地创建一个空文件夹,比如在E盘,创建一个“git”文件夹,然后在git下创建一个CDM文件夹。 * 进入CDM文件夹,在空白处右键选择“git克隆”(英文版:git clone) * 在弹出的对话框中,输入CDM项目的git地址(git或http均可,例如:<http://10.242.129.22/CDMGroup/CDM.git> ) * 输入要克隆的分支号(英文版:Branch),点击OK * 如果弹出输入用户名和密码,输入自己的gitlab账号密码,等待下载完成 * 使用VS打开sln文件,重新生成一下解决方案,即可开始进行代码开发。 <i><span style="background:red; color:yellow;">注意:配置开发环境,不要使用master分支,或者产品主分支,请为每个bug或功能创建特性分支。当然你也可以先克隆产品主分支,然后在这个基础上,右键选择“创建分支”来创建新的分支。</span></i> ### 提交代码 目标:如何将修改文件提交到分支中。并触发持续集成构建。 代码提交与SVN差不多,使用commit命令可以进行代码提交,由于git使用特性分支,因此代码提交位置为特性分支。<br /> 正确姿势是:每完成一个小点都可以进行commit到特性分支,完成特性开发和功能自验证之后,最后一次提交可使用push命令推送到主分支(比如在产品分支开发就推送到产品分支,如果是医院分支就推送到指定医院分支)。<br /> 标准姿势:每次都只提交,然后使用合并分支命令来发起代码合并,解决代码冲突。 ### 回滚代码 目标:文件修改错误,如何进行代码回退。 可使用菜单“revert”回滚代码。 ### 解决冲突 目标:代码提交时,与分支代码产生冲突时,如何解决冲突并提交。 [解决冲突](https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001375840202368c74be33fbd884e71b570f2cc3c0d1dcf000)操作说明 ### 分支操作 目标:如何在本地环境中切换分支,以及在分支中进行功能开发。 可使用菜单“switch/checkout”进行分支切换。<br /> [分支管理](https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013743862006503a1c5bf5a783434581661a3cc2084efa000)操作说明 #### 产品分支 目标:项目组通用产品分支定义。 慢病系统有固定的Production分支作为基础产品主分支,所有产品新特性均在这个基础上进行开发(后期可能会衍生出一个Development分支,用来管理迭代的开发,一个迭代开发完成后,合入Production分支)。 * 产品确定一个开发需求(或bug修复) * 开发人员将本地开发环境切换到production分支 * 创建新的分支,并命名为功能名称(简称) * 完成功能开发及自测 * 发起合并到Production分支的请求 * 完成冲突并合入,提交测试 #### 医院分支 目标:定义已发布医院的分支定义。 慢病系统的每个医院客户都是生成一个医院分支,用于管理此医院的代码和后续定制需求的开发。(比如gzy表示广东省中医院)<br /> 医院分支拉取规则:为医院部署版本时,会在对应部署的版本基础上拉出新的分支,并命名为医院分支(比如gzy)。<br /> 并生成新的发布版本,此后产品分支的特性需要对此医院上线时,在产品主分支上发起与医院分支的合并请求,将需要合入的特性和bug修复合入医院分支,并进行版本发布,及上线。<br /> 医院定制功能开发和bug修复,直接在医院分支上拉取特性分支进行代码开发,提交合并后进行版本发布,及上线。 #### 特性(功能)分支 目标:规范每个产品(或医院)分支上进行的功能开发,bug修复等操作。 特性分支是每次改动代码的基础分支,当一个任务来临(新功能或修复bug),首先确定此任务的基础分支是哪里(比如产品分支,医院分支),然后将本地仓库切换到对应的基础分支上,通过“创建分支”命令,为特性创建新的分支,并在分支上进行开发测试,完成后(自研通过)合入基础分支,等待发布测试。 如果此功能需要在多个医院分支上同步发布,发起多个医院分支的合并请求,解决冲突后,提交医院分支的测试。<br /> [Bug分支](https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00137602359178794d966923e5c4134bc8bf98dfb03aea3000)操作说明<br /> [Feature分支](https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001376026233004c47f22a16d1f4fa289ce45f14bbc8f11000)操作说明<br /> <i><span style="background:red; color:yellow;">会使用Jenkins自动进行基础的编译、打包检查。提高转测版本质量。</span></i> ## 其他 ### Markdown格式 git默认使用Markdown语法书写文档。 Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式。 Markdown具有一系列衍生版本,用于扩展Markdown的功能(如表格、脚注、内嵌HTML等等),这些功能原初的Markdown尚不具备,它们能让Markdown转换成更多的格式,例如LaTeX,Docbook。Markdown增强版中比较有名的有Markdown Extra、MultiMarkdown、 Maruku等。这些衍生版本要么基于工具,如Pandoc;要么基于网站,如GitHub和Wikipedia,在语法上基本兼容,但在一些语法和渲染效果上有改动。 <p align="right">--来自百度百科</p> 如果你决定使用markdown了,那就先快速学习一下它的语法吧。markdown语法很少很简单,可以参照下面两个链接中的简明版,然后在这个在线的markdown-html在线转换上(Daring Fireball: Markdown Web Dingus)操练操练,不用一个小时就可以掌握。<br /> 简明版:[Markdown 语法说明(简体中文版)](http://wowubuntu.com/markdown/basic.html)<br /> 完整版:[Markdown 语法说明(简体中文版)](http://wowubuntu.com/markdown/index.html)<br /> ## 使用问题 暂无
张文海
2023年3月16日 15:24
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码