1-git版本控制


  • 版本控制


  • 发展历史
    • CVS : 远古时代的版本控制软件
    • SVN : 集中式源代码管理器
    • GIT : 分布式源代码管理器
  • 集中式和分布式版本管理器的区别
    • 集中式版本管理器只在远程服务器上安装代码数据库 , 本地只能远程访问 , 下载需要的源文件 , 本地将源文件编辑完成 , 再上传到远程代码数据库
    • 分布式版本管理器在本地也安装了代码数据库 , 可以在本地进行版本管理 , 将希望上传的版本上传至远程数据库
    • 集中式版本控制每个文件都有隐藏的文件夹与之对应
    • 分布式版本控制只有根目录会有隐藏文件夹
  • 简介 : 版本管理器就是将我们在编写代码时 , 出现的我们需要保留的版本 , 修改的bug , 增加的功能 , 等不同阶段的我们希望保留下来的代码或者编辑记录 , 通过上传代码数据库的方式记录下来 , 方便程序员划分功劳 , 升级代码.

  • Git工作原理


  • 工作区 : 就是.git隐藏文件夹所在的目录 ,用于存放需要需要管理的源文件 , 我们要想看到隐藏文件夹 , 需要在查看里设置 , 通常我们新建一个项目文件夹 , 在里面初始化仓库(代码数据库)
  • 版本库
    • 版本库就是.git文件夹中的内容
    • 暂缓区 : 工作区的文件要想进行版本管理 , 必须先把它上传到暂缓区
    • 分支 : 分支就是文件最终的存储位置 , 默认的分支就是master , 即所有版本控制的文件信息都在master目录下
    • head指针 : 指向当前文件的存储分支 , 默认指向分支master

  • Git单机版使用说明


  • 下载git , 验证有没有下载成功 , 只需要右击 , 看会不会多出两个关于git的选项 , 或者cmd , 在命令行中输入git [--v] , 查看安装的git版本
  • 创建仓库 : 首先新建一个项目管理文件夹 , 在文件夹中右击 , 打开git的终端控制程序 , 输入git init , 即可在此文件夹中创建版本库 , 验证有没有创建成功 , 只需要在查看中勾选显示隐藏文件夹即可 , 如果当前目录下出现.git文件夹说明创建成功
  • 配置信息 : 我们需要给这个项目配置相关信息 , 必要的有两个
    • 用户名 : git config user.name "用户名"
    • 用户邮箱(便于其它人联系作者) : git config user.email "邮箱地址"
    • git config -r : 查看当前版本库的配置信息
  • 在工作区创建文件(任何类型)
  • 将文件添加到版本库暂缓区 :git add 文件名 , git add . (将当前全部文件添加到暂缓区) >* 查看当前版本库的状态 : git status , 工作区的文件显示红色 , 暂缓区的文件显示绿色 , 分支下的文件显示无色
  • 将暂缓区的文件移到当前分支 : git commit -m"说明信息"
  • 查看提交日志
    • 详细 : git log
    • 简短 : git reflog
  • 更改文件 : 工作区中已经提交过的文件如果修改了 , 需要重新提交
  • 查看文件最新改动的地方 : git diff 文件名 , git diff (查看当前路径所有文件最新改动的地方)
  • 让当前工作区文件回到上一个版本 : git reset --hard HEAD^(一个^代表回到上一个版本) , git reset --hard HEAD~N(代表回到上N个版本)
  • 让当前工作区文件回到指定版本 : git reflog(查看版本编号) , git reset --hard 版本编号
  • 删除工作区文件 : git rm 文件名
  • 将删除文件从版本库移除(在版本库中记录删除文件操作) :git commit -m"删除文件名"
  • 设置不能提交的隐私文件 : 企业开发专用链接(在这里把不同语言中 , 企业不能提交的文件都设置好了) , 对于个人来说 , 我们需要在工作区新建 .gitignore文件 , 这个文件需要在当前目录下 , cmd进入命令行 , 输入type NUL > .gitignore创建 , 将不能提交的文件名称放入这个文件夹 , 就不会再版本控制中看到关于这个文件的任何信息

  • Git团队开发使用说明


  • 概要 : 与单人开发不同的是 , Git团队开发需要多个人同时对项目进行开发 , 项目经理会先在服务器上初始化一个共享仓库 , 这个共享仓库可以在任何存储设备上 , 区别在于一个需要通过url下载 , 一个需要通过路径下载 , 个人只需要将这个共享仓库下载到本地 , 进行版本控制 , 将可以运行的代码版本 , 提交到共享仓库就可以了
  • 流程 :
    • 初始化共享仓库 : git init --bare (不要直接在远程仓库写代码 , 要程序员写就可以了 , 他们在远程服务器上下载仓库)
    • 拷贝远程仓库到本地 : git clone 远程仓库地址
    • 配置 : git config user.name "你的名称" , git config user.email "你的邮箱地址"
    • 提交 : add . / 文件名称 , git status(查看是否提交成功) , git commit -m"我提交的代码" (提交到head指针指向的分支 , 默认是master分支)
    • 更新远程数据库 : 如果远程数据库有更新 , 必须同步到本地 , 才能提交新的代码 , git pull
    • 提交到远程数据库 : git push
  • 补充说明 : git config -l (以列表的形式查看当前配置) , git status(查看工作区和暂缓区文件状态) , git diff(对比工作区文件和提交文件之间的差异) , git reset --hard^^ / --hard~N / --hard 版本号(通过git reflog查看)

  • Git协同模型


  • 概要 : 有时候由于市场原因 , 老板要求新添加功能 , 但是作为项目经理 , 我不确定这个功能能在项目截至时间内完成 , 我会新开一个分支 , 让比较牛的人去开发这个功能 , 新开的分支 , 会继承主分支的所有内容 , 在开发完后 , 可以和主分支合并 , 没有开发完 , 也不会影响主分支的进程
  • 流程
    • 查看仓库有多少分支 : git branch ( * 代表头指针指向的分支)
    • 新建一个分支 : git branch 分支名称
    • 切换分支 : git checkout 分支名称 (新建分支会保存master分支所有记录)
    • 合并分支 : git merge 分支名称 (将指定分支合并到主分支中)
    • 删除分支 : git branch -d 分支名称 (删除指定分支)

  • 划重点


  • 单人开发
    • 在工作区中打开git终端
    • 通过git init指令 , 初始化版本库
    • 编写代码
    • 将编写的代码通过git add , 添加到版本库的暂缓区
    • 通过git commit -m"说明" 将暂缓区的文件添加到HEAD指针指向的分支中 ( 默认只有一个分支 , master分支 , 也称之为主分支)
    • 通过git log查看我们每次添加修改的内容
    • 通过git diff 查看当前文件和版本库中文件的差异
    • 通过git reset --hard 版本号 在任意版本之间切换
  • 多人开发
    • 项目负责人在服务器上的工作区中打开git终端
    • 通过git init --bare , 初始化一个共享的版本库
    • 项目负责人通过git clone从远程服务器上下载共享的版本库到本地
    • 编写代码
    • 将编写的代码通过git add . 添加到版本库的暂缓区中
    • 通过git commit -m"说明" 将暂缓区的文件添加到HEAD指针指向的分支中
      • 注意 !! 一定不要将不能运行的代码提交到远程的版本库
      • 一般情况下 , 在企业开发中 , 本地的提交可能稍微频繁一些 , 但是提交到远程服务器的操作不会那么频繁 , 一般情况下一天最多两次
    • 通过 git push 将本地编写好的代码提交到远程服务器的版本库
    • 其它开发人员可以通过 git clone或者git push从远程服务器获取最新的代码
  • 注意点 !!!!
    • 在企业开发中 , 如果有其它同事往服务器上提交了新的代码 , 那么我们就没办法直接提交 , 如果我们想要提交 , 那么我们必须先将服务器上的代码更新到本地
    • 更新到本地之后 , 如果没有代码冲突 , 那么可以直接提交
    • 更新到本地之后 , 如果有代码冲突(在同一个文件的同一行编辑了代码) , 那么必须先手动解决了冲突 , 才能提交

在企业开发中 , 一定要记住 , 千万不要好几天都不提交代码 , 否则后果非常严重 , 很多烂屁股等你擦 , 一般情况下 , 一旦分配给自己的某个功能实现了就立即提交到远程服务器 , 或者分配给你的任务中 , 某个模块实现了就立即提交到远程服务器 , 只要保证提交到远程服务器的代码是可以运行的就行

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

推荐阅读更多精彩内容

  • Git常用语法 [TOC] Git简介 描述 ​ Git(读音为/gɪt/。)是一个开源的分布式版本控制系统,...
    君惜丶阅读 3,511评论 0 13
  • 1. 安装 Github 查看是否安装git: $ git config --global user.name "...
    Albert_Sun阅读 13,651评论 9 163
  • 1.git的安装 1.1 在Windows上安装Git msysgit是Windows版的Git,从https:/...
    落魂灬阅读 12,660评论 4 54
  • 我时常在雨城最高的楼上站着,俯瞰整座城。 这座城是大陆上降雨最多的地方,城内粮草需要朝廷来运送。往来有敌国之谍,滔...
    之卿阅读 365评论 0 1
  • 最近学习的时候,经常听到模型这两个字,虽然它一直伴随着我的学习历程,但是第一次听到别人拿出来说还是在王垠大神的博客...
    我不懂我不懂a阅读 747评论 0 0