git使用简要说明

工具下载安装

  • git客户端工具
  • 图形化操作工具TortoiseGit
  • TortoiseGit汉化语言包

内部下载地址:ftp://192.168.3.2/版本管理/Git/ 帐号密码:ftpdown down_888

  1. Git-2.12.2.2-64-bit
  2. TortoiseGit-2.4.0.2-64bit
  3. TortoiseGit-LanguagePack-2.4.0.0-64bit-zh_CN

开始干活

常用配置

通过TortoiseGit工具的设置,可以提高日常操作代码仓库的效率,请根据自己后续的需要回看此点进行配置.

git进入设置菜单

  1. 设置右键直接可以看到的菜单,比如拉取、提交、推送、签出等常用菜单项
  2. 设置隐藏菜单项,即在二级菜单中你都找不到的,可以防止干扰,使用一定时间后可以根据自己的需要干掉一部分,清爽舒心
  3. 查看差异及合并工具指定,此处强烈安利BCompare,自带的工具让人感到绝望
    具体配置项
克隆版本库(下载代码)

打开 公司内部代码仓库,定位参与开发的版本库并打开到概况页面(默认即进入概况页)

克隆时选择的网址

本地准备好存放代码的目录,右键克隆(git clone)并确认窗口内的目录是否为想要存放代码的位置,请一定按默认名称存储,防止多个项目的代码搞混

工作目录右键进行克隆

克隆地址设置
获取最新代码

首次克隆代码,本地代码仓库为远程仓库设置的缺省分支的最新提交,若开发阶段暂未启用新分支的项目组可以不需要再次获取代码,否则通过右键菜单中的拉取(git pull)获取最新提交的代码.

拉取与获取的区别?(git pull & fetch

  • 拉取:获取最新提交代码 + 获取
  • 获取:仅获取远程仓库最新分支、标签等指针类信息
分支策略(项目经理关注)

git带有非常强大的分支管理能力,可以满足各类研发或迭代项目的版本控制需要,很多灵活高级的用法可以根据项目的需要去调整,大家可以根据相关的教程模拟测试并应用,此处不再赘述.本次仅以最简单常见的敏捷开发过程中如何保障发布版本与开发不相干扰.

网店管家(云端版)分支及标签

单主干模式由于所有开发人员都在维护同一套版本代码,如果没有自动集成及自动化测试支撑,无法确保主干代码的稳定性.通常已发布的产品,至少会有两个主分支,其中之一对应生产环境,另一支对应开发环境,线上问题的修正与快速迭代同步进行.

  • 默认创建的版本已存在master分支,此分支用于发布到生产环境,生产环境出现问题基于此分支创建新分支进行修复,修复完成后合并到master及开发分支.
  • 创建一个用于新功能研发的分支develop,每次新功能的发布都基于此分支,发布后的分支需要及时合并到master分支.

如果项目组中开发成员较多,可以再切割为更小规模的小组用于某独立新功能的研发.

日常研发是否需要分拆多个分支进行,取决与团队的规模,通过人员或功能的划分尽可能的减少多人改写同一代码单元的可能性,以减少日常冲突出现的几率.

创建分支

项目经理根据研发团队版本控制需要创建对应分支,可以通过签出(git checkout)时选择create new branch或直接右键创建分支(create branch).
开发成员根据为避免冲突及代码覆盖,可以签出时创建本地工作分支(原因见如何减少冲突部分).

分支选择(成员关注)
  1. 研发角色
    根据项目经理分配,管理与开发任务对应的开发分支,日常开发时,请确保分支选择正确,每日开始工作前获取最新代码,确认分支名称.

查看或查看分支名称,通过菜单右键中的签出(git check out)来操作或查看.

到需要提测发布阶段时,从develop分支开出发布分支(release类型),系统测试完成后合并到developmaster分支并删除该发布分支.

  1. 维护角色
    值班或其他排查问题的同事,需要将分支定位到master分支进行跟踪,发现紧急问题基于master分支开出修复新分支(hotfix类型),修复后及时合并到主干及开发分支并删除修正分支.
分支类型 命名规范 创建自 合并到 说明
feature feature/* develop develop 新功能
release release/* develop developmaster 一次新版本的发布
hotfix hotfix/* master developmaster 生产环境中发现的紧急bug的修复
提交代码

提交与推送的区别(git commit & git push)
前置是提交到本地的代码仓库,后者是将本地代码仓库已提交的内容同步到远程代码仓库

代码做出更改后,右键选择提交,备注本次提交变更的内容,或者在vs等ide中集成的工具直接提交.也可以提交并推送,推送时可能会遇到提示本地代码仓库版本较低或出现冲突的情况,具体处理见合并分支及冲突解决部分.

合并分支(merge)
  1. 开发成员的代码合并

每个开发的电脑上都相当于有一套版本库,在将代码推送到远程仓库时,就涉及代码合并.

原因说明
从远程拉取最新代码时,相当于建立了一个远程分支的分支,并基于此分支做后续改动,而远程的分支又有其他同事在同步改动,此时就出现两个不同的分支,所以在拉取代码时也相当于做了一次代码合并,一旦代码存在冲突就需要做合并

  1. 项目经理的代码合并

新功能的发布\生产环境bug修正,最终都需要合并到masterdevelop分支,如果功能划分时重合度较高,此时合并代码的工作量多\风险高.
具体合并的方法:

  1. 先签出到目标分支上,拉取最新代码.
  2. 操作合并(merge),选择源分支(及需要合并到主干或开发分支的工作分支).
  3. 通过日志与合并前的最后一次提交做对比,复核代码的正确性.
  4. 如果3中出现冲突,按下方解决冲突的方法处理.
冲突解决(resolve conflicts)

具体开发过程中会发现,其实冲突做所难免,大家都需要知道如何正确的解决冲突.

  1. 何为冲突

多人在同时维护同一份代码文件且git无法判断是否改动不同的代码块时,就需要人工介入协助完成无法自动合并的内容.

发现冲突

冲突处理的可选方案

  1. 处理冲突

可以通过BCompare直观的查看冲突的原因,从下图中可以看出解决冲突涉及三个版本(BASE LOCAL REMOTE),其中BASE为冲突产生的两个分支最近一次继承的提交(都是从此出衍生而来).

解决冲突

根据实际情况整合得到正确的输出在工作目录下.

创建标签(create tag)

标签作用是定位到某个稳定的版本,可以供发布时回滚或问题追溯,标签的使用与分支基本一致,差别在于标签不可再次提交改动,具体应用同如何签出到某个分支.

  • 项目进入发布阶段时,项目经理需要及时对稳定的developmaster分支打上标签
  • 生产环境出现bug修复后及时给master分支加上新标签
如何减少冲突

解决冲突是非常耗费精力且风险很高的一项工作,而我们通过一些技巧可以避开一些不必要的冲突.

  1. 合理划分各开发成员维护代码的范围,尽可能的减少多人维护同一单元的情况出现.可以通过模块的划分\公共单元特定人维护等工作任务分配时进行物理隔离.
  2. 合理拆分开发团队,通过分支策略隔离日常开发过程中的冲突(注:不能解决发布时合并代码的冲突).
  3. 开发成员在具体开发过程中,尽量自行在本机工作区再次建立工作分支,在专项工作完成后再合并到开发分支并推送到远程仓库.


    git日常开发分支管理

少量修正代码,可以不新建分支再合并,可以直接调整完后不提交,使用贮藏(stash save)将当前的变更存储起来,然后再次拉取最新代码,再弹出贮藏(pop stash).
另外可以通过贮藏列表(stash list)查看多次贮存的内容

如何避免覆盖他人代码

当你若无其事的推送完一次代码,不久后队友发现令人绝望的事故---提交的代码不见了!
没有动过他们的代码\没看到有任何冲突的提示,为什么???
具体的原因基于git自动合并代码的机制,合并代码时基准版本是local而不是remote,当发现你本地的文件较新时(与本地操作系统的文件系统有关),它可能会认为你把部分代码删除了,然后他人所加的代码自然被无情的覆盖.
为了减少不必要的麻烦(可能整个团队都要为此做一次代码恢复...),大家最好参照如何减少冲突部分推荐的做法进行日常的版本维护(可能有其它更实用的办法,集思广益).另外再每次推送代码到远程仓库后,请按开发规约review提交的代码,如果发现自己提交中包含多个未改动的文件,及时找项目经理协调解决减少对其他成员的影响.

如何恢复被覆盖代码
  1. 先定位到源头,找到该成员提交前最后一位其他成员的提交
  2. 本地代码拉取到最新状态,复原(revert to this commit)指定的提交(含工作区与仓库索引项,最下面的选项)
  3. 推送到远程仓库,推送时把强制(force)选项中的 知道所有的变更(known changes) 勾选,确认后将强制把远程仓库的代码恢复到此提交
  4. 所有项目成员检查本地代码仓库,是否包含源头中被覆盖的提交
  5. 源头及在被覆盖的代码基础上做过代码改动的成员,按如下步骤修复:
    5.1 确认所有内容提交后在此本地分支上建立一个新的分支
    5.2 将工作分支复原到未被影响的提交(可再拉取一次确保最新)
    5.3 将刚才新建的分支合并到工作分支,提交并推送到远程仓库

入门到精通(DIY)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容

  • Git 是目前最流行的分布式版本控制系统之一。 版本控制指的是,记录每次版本变更的内容和时间等细节,保留各版本之间...
    神齐阅读 1,396评论 0 7
  • 这篇博文是自己在学习git过程中的思考总结。本文仅仅代表个人的看法,如有不妥地方还请本文文末留言。 😊 原文链接g...
    Ming_Hu阅读 1,054评论 4 18
  • 多种多样的工作流使得在项目中实施Git时变得难以选择。这份教程提供了一个出发点,调查企业团队最常见的Git工作流。...
    JSErik阅读 4,365评论 2 8
  • 一、基本概念: 注:对于git的分布式概念及其优点,不重复说明,自己百度或谷歌。本文中涉及到指令前面有$的,在cm...
    大厂offer阅读 1,403评论 0 3
  • 今夜,我走过广场 如走过无数次的故乡 大雁塔,千年守望 守望一个遥远的梦想 鼓角争鸣,秧歌疯狂 腰肢扭曲,灯火辉煌...
    杨林柯阅读 1,270评论 2 4